JAVA-将面板添加到框架中
我目前的框架有问题。 我试图将一个面板添加到一个框架中,但它会打开两个不同的窗口,如何修复? 我希望按钮和面板在框架中JAVA-将面板添加到框架中,java,swing,jframe,Java,Swing,Jframe,我目前的框架有问题。 我试图将一个面板添加到一个框架中,但它会打开两个不同的窗口,如何修复? 我希望按钮和面板在框架中 public class MenuSample extends JFrame{ 在不同窗口中打开的面板和按钮 private JButton button; private JPanel panel; public MenuSample () { Frame testFrame = new Frame("Test Frame"); testFr
public class MenuSample extends JFrame{
在不同窗口中打开的面板和按钮
private JButton button;
private JPanel panel;
public MenuSample () {
Frame testFrame = new Frame("Test Frame");
testFrame.addWindowListener(new WindowAdapter () {
public void windowClosing (final WindowEvent e)
{
System.exit(0);
}
});
testFrame.setMenuBar(this.getMenubar());
testFrame.setSize(500,300);
testFrame.setLocation(400,300);
testFrame.setVisible(true);
应该在框架中的面板和按钮
panel = new JPanel(new GridLayout(1,1));
button = new JButton("erster Button");
panel.add(button);
getContentPane().add(panel);
pack();
setVisible(true);
}
protected MenuBar getMenubar () {
some irrelevant MenuBar stuff
menuLeiste.add(...);
return menuLeiste;
}
}
。。。它会打开两个不同的窗口,如何修复
原因是您正在创建两个不同的主窗口,一个是JFrame
(请注意,MenuSample
class是aJFrame
),另一个是Frame
。或者使用MenuSample
本身作为顶级JFrame
或者委托给一个单独的框架-根据下面的评论,我的假设是您希望使用委托方法,所以只需这样做即可
import java.awt.Dimension;
import java.awt.GridLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
public class MenuSample {
private JFrame testFrame = new JFrame("Test Frame");
private JButton button = new JButton("erster Button");
private JPanel panel = new JPanel(new GridLayout(1, 1)) {
private static final long serialVersionUID = 1L;
@Override
public Dimension getPreferredSize() {
return new Dimension(400, 300);
}
};
public MenuSample() {
panel.add(button);
testFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
testFrame.add(panel);
testFrame.pack();
testFrame.setLocation(400, 300);
testFrame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new MenuSample();
}
});
}
}
注:
- 注意在
方法中启动UI的方式。这是为了避免并发问题(请参阅)main()
- 不要添加WindowListener,只需将
的JFrame
设置为defaultCloseOperation
,以确保应用程序在EXIT\u ON\u CLOSE
关闭时终止。看JFrame
JFrame
(请注意,MenuSample
class是aJFrame
),另一个是Frame
。或者使用MenuSample
本身作为顶级JFrame
或者委托给一个单独的框架-根据下面的评论,我的假设是您希望使用委托方法,所以只需这样做即可
import java.awt.Dimension;
import java.awt.GridLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
public class MenuSample {
private JFrame testFrame = new JFrame("Test Frame");
private JButton button = new JButton("erster Button");
private JPanel panel = new JPanel(new GridLayout(1, 1)) {
private static final long serialVersionUID = 1L;
@Override
public Dimension getPreferredSize() {
return new Dimension(400, 300);
}
};
public MenuSample() {
panel.add(button);
testFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
testFrame.add(panel);
testFrame.pack();
testFrame.setLocation(400, 300);
testFrame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new MenuSample();
}
});
}
}
注:
- 注意在
方法中启动UI的方式。这是为了避免并发问题(请参阅)main()
- 不要添加WindowListener,只需将
的JFrame
设置为defaultCloseOperation
,以确保应用程序在EXIT\u ON\u CLOSE
关闭时终止。看JFrame
MenuSample extends JFrame
创建菜单示例将创建一个Swing窗口,因为它是一个JFrame
Frame testFrame = new Frame("Test Frame");
创建新帧(…)
将创建一个AWT窗口
要仅创建一个窗口,您需要:
- 删除“extends JFrame”并将所有内容添加到
或testFrame
- 移除
并将所有内容添加到此帧testFrame=新帧(“测试帧”)
MenuSample extends JFrame
创建菜单示例将创建一个Swing窗口,因为它是一个JFrame
Frame testFrame = new Frame("Test Frame");
创建新帧(…)
将创建一个AWT窗口
要仅创建一个窗口,您需要:
- 删除“extends JFrame”并将所有内容添加到
或testFrame
- 移除
并将所有内容添加到此帧testFrame=新帧(“测试帧”)