框架按钮不可见
Frame Buttons Aren't Visible
我有一个应该是 "Layouts" 的例子。一个简单的程序,当用户单击按钮时,它将改变框架的布局。
它工作正常,直到我添加最后两个其他帧,现在当我运行它时按钮丢失了。我查了又查,找不到问题。有人可以帮忙吗?
public class FrameLayouts {
public static void main (String [] args){
final JFrame frame1 = new JFrame("FlowLayout");
final JFrame frame2 = new JFrame("GridLayout");
final JFrame frame3 = new JFrame("BorderLayout");
frame1.setVisible(true);
frame2.setVisible(false);
frame3.setVisible(false);
frame1.setLocationRelativeTo(null);
frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame1.setSize(500,500);
frame1.setLayout(new FlowLayout());
JButton button1 = new JButton ("Grid Layout");
JButton button2 = new JButton ("Border Layout");
JButton button3 = new JButton ("Flow Layout");
JButton button4 = new JButton ("EXTRA");
JButton button5 = new JButton ("EXTRA");
frame1.add(button4);
frame1.add(button1);
frame1.add(button2);
frame1.add(button3);
frame1.add(button5);
frame1.pack();
frame2.add(button4);
frame2.add(button1);
frame2.add(button2);
frame2.add(button3);
frame2.add(button5);
frame2.pack();
frame3.add(button4, BorderLayout.NORTH);
frame3.add(button1, BorderLayout.CENTER);
frame3.add(button2, BorderLayout.SOUTH);
frame3.add(button3, BorderLayout.EAST);
frame3.add(button5, BorderLayout.WEST);
frame3.pack();
button1.addActionListener(new ActionListener(){
public void actionPerformed (ActionEvent e){
frame2.setVisible(true);
frame2.setLocationRelativeTo(null);
frame2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame2.setSize(500,500);
frame2.setLayout(new GridLayout(2,3));
frame3.setVisible(false);
frame1.setVisible(false);
}
});
button2.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
frame3.setVisible(true);
frame3.setLocationRelativeTo(null);
frame3.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame3.setSize(500,500);
frame3.setLayout(new BorderLayout(5,5));
frame1.setVisible(false);
frame2.setVisible(false);
}
});
button3.addActionListener(new ActionListener(){
public void actionPerformed (ActionEvent e){
frame1.setVisible(true);
frame1.setLocationRelativeTo(null);
frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame1.setSize(500,500);
frame1.setLayout(new FlowLayout());
frame2.setVisible(false);
frame3.setVisible(false);
}
});
}
}
实际上,您不能将同一个按钮添加到多个容器中。当您将它添加到第二帧时,它会从第一帧中删除。
只需为每个框架实例创建按钮的副本。
我有一个应该是 "Layouts" 的例子。一个简单的程序,当用户单击按钮时,它将改变框架的布局。 它工作正常,直到我添加最后两个其他帧,现在当我运行它时按钮丢失了。我查了又查,找不到问题。有人可以帮忙吗?
public class FrameLayouts {
public static void main (String [] args){
final JFrame frame1 = new JFrame("FlowLayout");
final JFrame frame2 = new JFrame("GridLayout");
final JFrame frame3 = new JFrame("BorderLayout");
frame1.setVisible(true);
frame2.setVisible(false);
frame3.setVisible(false);
frame1.setLocationRelativeTo(null);
frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame1.setSize(500,500);
frame1.setLayout(new FlowLayout());
JButton button1 = new JButton ("Grid Layout");
JButton button2 = new JButton ("Border Layout");
JButton button3 = new JButton ("Flow Layout");
JButton button4 = new JButton ("EXTRA");
JButton button5 = new JButton ("EXTRA");
frame1.add(button4);
frame1.add(button1);
frame1.add(button2);
frame1.add(button3);
frame1.add(button5);
frame1.pack();
frame2.add(button4);
frame2.add(button1);
frame2.add(button2);
frame2.add(button3);
frame2.add(button5);
frame2.pack();
frame3.add(button4, BorderLayout.NORTH);
frame3.add(button1, BorderLayout.CENTER);
frame3.add(button2, BorderLayout.SOUTH);
frame3.add(button3, BorderLayout.EAST);
frame3.add(button5, BorderLayout.WEST);
frame3.pack();
button1.addActionListener(new ActionListener(){
public void actionPerformed (ActionEvent e){
frame2.setVisible(true);
frame2.setLocationRelativeTo(null);
frame2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame2.setSize(500,500);
frame2.setLayout(new GridLayout(2,3));
frame3.setVisible(false);
frame1.setVisible(false);
}
});
button2.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
frame3.setVisible(true);
frame3.setLocationRelativeTo(null);
frame3.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame3.setSize(500,500);
frame3.setLayout(new BorderLayout(5,5));
frame1.setVisible(false);
frame2.setVisible(false);
}
});
button3.addActionListener(new ActionListener(){
public void actionPerformed (ActionEvent e){
frame1.setVisible(true);
frame1.setLocationRelativeTo(null);
frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame1.setSize(500,500);
frame1.setLayout(new FlowLayout());
frame2.setVisible(false);
frame3.setVisible(false);
}
});
}
}
实际上,您不能将同一个按钮添加到多个容器中。当您将它添加到第二帧时,它会从第一帧中删除。
只需为每个框架实例创建按钮的副本。