我是java的新手,并且已经达到了它的高级水平,我在GUI控件中遇到了问题,我点击了一个按钮,当点击它时会打开一个这样的新窗口:
JButton b = new JButton("Open New Window");
b.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
Window w = new Window();
w.setVisible(true);
}
});
这个窗口包含其他对象,但我一直在考虑按这样的方式制作按钮,而不是打开一个新的JFrame,它打开同一个窗口中的所有内容而不打开一个新窗口,老实说,我不知道该怎么做我可以得到一些专业的帮助
答案 0 :(得分:1)
我认为你想要这种情况的卡片布局。这里有一些代码可以指出你正确的方向。
class MyFrame extends JFrame {
public MyFrame() {
JComponent allMyStuff = new JComponent();
JComponent allMyOtherStuff = new JComponent();
this.getContentPane().setLayout(new CardLayout());
this.getContentPane().add(allMyStuff, "1");
this.getContentPane().add(allMyOtherStuff, "2");
CardLayout cl = (CardLayout) (this.getContentPane().getLayout());
cl.show(this.getContentPane(), "1");
JButton b = new JButton("Open New Window"); //add somewhere to first compoonent
b.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
CardLayout cl = (CardLayout) (this.getContentPane().getLayout());
cl.show(this.getContentPane(), "2");
}
});
}
}
我怀疑代码运行但通常它有这个想法。你在一个面板中有东西,在另一个面板中有东西,你只想在两者之间切换。当然需要在第一个面板(allMyStuff)中添加按钮。
答案 1 :(得分:0)
我不清楚按下按钮时你想要在GUI中显示什么,但是你应该考虑创建不同的JPanel“视图”并使用CardLayout在GUI中交换这些视图。 / p>
例如,查看这些StackOverflow问题和答案:
答案 2 :(得分:0)
在您介绍的动作侦听器中,您可以访问实例变量。因此,如果需要,可以向GUI中添加更多元素。我做了一个小型演示,也许这就是你想要做的。为了使您的GUI更好,您应该考虑使用布局管理器。
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
public class GUI {
JFrame frame;
JButton btn;
JButton compToAdd;
public GUI() {
frame = new JFrame("Testwindow");
frame.setSize(500, 500);
frame.setLayout(null);
btn = new JButton("test btn");
btn.setBounds(20, 20, 200, 200);
btn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
compToAdd = new JButton("new Button");
compToAdd.setBounds(20, 220, 200, 200);
frame.add(compToAdd);
frame.repaint();
}
});
frame.add(btn);
frame.setVisible(true);
}
public static void main(String[] args) {
GUI gui = new GUI();
}
}