Behnam.B
سه شنبه 17 اردیبهشت 1392, 23:43 عصر
سلام دوستان.
برنامه ای خواستم بنویسم که با کلیک روی دکمه start پنلی به فرم GridLayout که قبلا پرش کردیم رو نمایش بده. اما وقتی برنامه رو اجرا میکنیم، بعد از کلیک روی دکمه، پنل، اول طوری نمایش داده میشه که انگار layoutش null تنظیم شده!:متعجب: اما مثلا با تغییر سایز frame نمایش پنل درست خواهد شد!
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class App {
JFrame frame;
JPanel panel;
JButton startBtn;
JButton button1;
JButton button2;
public App() {
frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOS E);
frame.setSize(300, 300);
frame.setLocationRelativeTo(null);
frame.setLayout(null);
panel = new JPanel();
panel.setSize(200, 200);
panel.setLocation(50, 50);
panel.setBackground(Color.red);
panel.setLayout(new GridLayout(1, 2));
button1 = new JButton("Button1");
button2 = new JButton("Button2");
panel.add(button1);
panel.add(button2);
startBtn = new JButton("Start");
startBtn.setSize(80, 30);
startBtn.setLocation(0, 0);
startBtn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
frame.add(panel);
frame.repaint();
// frame.setVisible(true);
}
});
frame.add(startBtn);
frame.setVisible(true);
}
}
و main ش هم که:
public class Program {
public static void main(String[] args){
App app = new App();
}
}
این مشکل با گذاشتن خط 43 رفع شد، اما استفاده ازش به نظر نمیاد معقول باشه!
کسی میتونه دلیل این اتفاق و روش معمول حلش رو بگه؟
برنامه ای خواستم بنویسم که با کلیک روی دکمه start پنلی به فرم GridLayout که قبلا پرش کردیم رو نمایش بده. اما وقتی برنامه رو اجرا میکنیم، بعد از کلیک روی دکمه، پنل، اول طوری نمایش داده میشه که انگار layoutش null تنظیم شده!:متعجب: اما مثلا با تغییر سایز frame نمایش پنل درست خواهد شد!
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class App {
JFrame frame;
JPanel panel;
JButton startBtn;
JButton button1;
JButton button2;
public App() {
frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOS E);
frame.setSize(300, 300);
frame.setLocationRelativeTo(null);
frame.setLayout(null);
panel = new JPanel();
panel.setSize(200, 200);
panel.setLocation(50, 50);
panel.setBackground(Color.red);
panel.setLayout(new GridLayout(1, 2));
button1 = new JButton("Button1");
button2 = new JButton("Button2");
panel.add(button1);
panel.add(button2);
startBtn = new JButton("Start");
startBtn.setSize(80, 30);
startBtn.setLocation(0, 0);
startBtn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
frame.add(panel);
frame.repaint();
// frame.setVisible(true);
}
});
frame.add(startBtn);
frame.setVisible(true);
}
}
و main ش هم که:
public class Program {
public static void main(String[] args){
App app = new App();
}
}
این مشکل با گذاشتن خط 43 رفع شد، اما استفاده ازش به نظر نمیاد معقول باشه!
کسی میتونه دلیل این اتفاق و روش معمول حلش رو بگه؟