ورود

View Full Version : سوال: نیم نگاهی بندازید



takstar
شنبه 04 اردیبهشت 1389, 19:05 عصر
سلام
من وقتی که کد زیر را اجرا میکنم دکمه ای به اندازه کل صفحه موردنظر ایجاد می شود، چه تغییری باید در کد زیر اعمال کنم تا دکمه به اندازه موردنظر برنامه نویس ایجاد شود؟

import javax.swing.*;
import java.awt.*;
public class Buttontest extends JFrame {
Button b=new Button();
public Buttontest (String t){
super.setTitle("help");
super.setDefaultCloseOperation(JFrame.EXIT_ON_CLOS E );
super.setSize(200,300);
super.setLocation(350,400);
add(b);
}
public static void main(String args[]){
Buttontest a=new Buttontest("hello");
a.show();
}
}

jlover
شنبه 04 اردیبهشت 1389, 20:49 عصر
مدیر طرحبندی پیش فرض JFrame از نوع BorderLayout هست. وقتی مولفه ای به کانتینری با این طرحبندی اضافه میکنید و منطقه ی قرارگیریش (شمال، جنوب، شرق یا غرب و مرکز ) رو مشخص نمیکنید، مولفه ی شما در منطقه ی مرکزی قرار داده خاهد شد.
اگر مناطق دیگه خالی از سکنه (!) باشند، اونوقت منطقه ی مرکزی به اندازه ی کل اندازه ی قاب از اطراف گسترش پیدا میکنه (اگه بعضی مناطق مولفه ای رو در خود جای داده باشند، منطقه ی مرکزی تا انتهای مناطق خالی گسترده میشه)
و در اینجا منطقه ی مرکزی همانا یک دکمه ست که بدلیل اینکه اندازه ش صریحاً تنظیم نشده، در رفتار پیشفرض، باندازه ی کل منطقه ای که درش قرار داره خاهد شد !

در کل شما هیچ قیدی برای طرحبندیتون قائل نشدید.

برنامه تون ایرادات زیاد دیگه ای هم داره که به پرسشتون مربوط نیست اما جا داره ایراد بشه :

*متد show منسوخ شده و بجی اون از setVisible استفاده میشه (البته مشکلی پیش نمیاد، ولی بهتره که از راهکار جدیدتر استفاده بشه)
*تمامی super های بکار رفته در سازنده ی JFrame اضافی هستند، چرا که شما کلاستون رو توسعه ا(یا زیرکلاس)ی از JFrame قرار دادید و متدهای مورد استفاده تون هم در کلاستون پیاده سازی نشدند، پس از کلاس مافوق استفاده خاهد شد.
*بهتر بود از setTitle استفاده نمیکردید. اتفاقاَ اینجا جایز بود که از super استفاده میکردید و پارامتر رشته ای رو به درونش میفرستادید. مستندات این سازنده بسادگی و به روشنی کارش رو توضیح میده !
*برای اضافه کردن مولفه ها به یک JFrame باید ابتدا پنجره ی محتوای اون رو - که یک کانتینر هست _ بدست آورد و مولفه ها رو به اون اضافه کرد. در اینجا میتونید طرحبندیهای مورد نظرتون رو هم اعمال کنید.
مثلن سازنده ی کلاس شما میتونه به شکل زیر اصلاح بشه :

public ButtonTest(String t) {
super("help");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(200, 300);
setLocation(350, 400);
Container container = getContentPane();
container.setLayout(new FlowLayout());
container.add(b);
}

mohsensaghafi
سه شنبه 07 اردیبهشت 1389, 19:30 عصر
برای اینکه کدت درست بشه این تکه کد رو قبل از دستور add اضافه کن.


setLayout(new FlowLayout());