gpt4 book ai didi

java - 如何使用通用 JPanel() 管理 BorderLayout

转载 作者:行者123 更新时间:2023-12-02 00:51:09 24 4
gpt4 key购买 nike

当 JPanel 像这样声明时,我不确定如何引用它。

这是整个程序的编码:一切正常,但布局不是我想要的。向其中添加 BorderLayouts 似乎不起作用。

class FrameDemo
{
public static void main(String[] args)
{
final JFrame frame = new JFrame("CIT Test Program");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setPreferredSize(new Dimension(350, 250));
frame.add(new JPanel()
{{
String[] tests = {"A+ Certification", "Network+ Certification", "Security+ Certification", "CIT Full Test Package"};
JComboBox comboBox = new JComboBox(tests);
TextArea text = new TextArea(5,10);
add(new JLabel("Welcome to the CIT Test Program "));
add(new JLabel("Please select which Test Package from the list below."));

JMenuBar menuBar = new JMenuBar();
JMenu fileMenu = new JMenu("File");
JMenu editMenu = new JMenu("Edit");
JMenu helpMenu = new JMenu("Help");
menuBar.add(fileMenu);
menuBar.add(editMenu);
menuBar.add(helpMenu);
JMenuItem newMenu = new JMenuItem("New (Ctrl+N)");
JMenuItem openMenu = new JMenuItem("Open (Ctrl+O)");
JMenuItem saveMenu = new JMenuItem("Save (Ctrl+S)");
JMenuItem exitMenu = new JMenuItem("Exit (Ctrl+W)");
JMenuItem cutMenu = new JMenuItem("Cut (Ctrl+X)");
JMenuItem copyMenu = new JMenuItem("Copy (Ctrl+C)");
JMenuItem pasteMenu = new JMenuItem("Paste (Ctrl+V)");
JMenuItem infoMenu = new JMenuItem("Help (Ctrl+H)");
fileMenu.add(newMenu);
fileMenu.add(openMenu);
fileMenu.add(saveMenu);
fileMenu.add(exitMenu);
editMenu.add(cutMenu);
editMenu.add(copyMenu);
editMenu.add(pasteMenu);
helpMenu.add(infoMenu);
this.add(comboBox, BorderLayout.NORTH);
this.add(text, BorderLayout.SOUTH);
frame.setJMenuBar(menuBar);
add(new JButton("Select")
{{
addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e )
{
frame.dispose();
JOptionPane.showMessageDialog(frame,"IT WORKS!");

}
});
}});
}});
frame.pack();
frame.setLocationRelativeTo( null );
frame.setVisible( true );

}
}

不确定如何引用 JPanel 来使用 BorderLayout。我该如何去做呢?

最佳答案

如果您将面板添加到 JFrame(如您在此处执行的那样使用 add()),则可以假设它被添加为 contentPanel。然而,最好是明确的。而不是这个:

frame.add(new JPanel()
{}

使用这个:

JPanel panel = new JPanel(new BorderLayout());
// add your stuff to the panel;
frame.add(panel);

编辑:

查看您的编辑后,很明显您正在初始化一个匿名类。这通常不是坏习惯,但在这里您放置了大量初始化代码。您放入的代码位于双括号 block 中,本质上是将其放入静态初始值设定项中。它看起来就像一个普通的匿名类,但事实并非如此。有了这么多代码,它值得拥有自己的类。如果您甚至编写了一个新类,那么应该没问题。我建议您将其定义为 JPanel 的扩展,并在您自己的构造函数中将 new BorderLayout() 传递给 super

编辑2:

如果您创建一个名为 Bar 的全新文件/类,并按如下方式编码:

public class Bar extends JPanel {
public Bar(final JFrame frame) {
String[] tests = { "A+ Certification", "Network+ Certification",
"Security+ Certification", "CIT Full Test Package" };
JComboBox comboBox = new JComboBox(tests);
TextArea text = new TextArea(5, 10);
add(new JLabel("Welcome to the CIT Test Program "));
add(new JLabel("Please select which Test Package from the list below."));

JMenuBar menuBar = new JMenuBar();
JMenu fileMenu = new JMenu("File");
JMenu editMenu = new JMenu("Edit");
JMenu helpMenu = new JMenu("Help");
menuBar.add(fileMenu);
menuBar.add(editMenu);
menuBar.add(helpMenu);
JMenuItem newMenu = new JMenuItem("New (Ctrl+N)");
JMenuItem openMenu = new JMenuItem("Open (Ctrl+O)");
JMenuItem saveMenu = new JMenuItem("Save (Ctrl+S)");
JMenuItem exitMenu = new JMenuItem("Exit (Ctrl+W)");
JMenuItem cutMenu = new JMenuItem("Cut (Ctrl+X)");
JMenuItem copyMenu = new JMenuItem("Copy (Ctrl+C)");
JMenuItem pasteMenu = new JMenuItem("Paste (Ctrl+V)");
JMenuItem infoMenu = new JMenuItem("Help (Ctrl+H)");
fileMenu.add(newMenu);
fileMenu.add(openMenu);
fileMenu.add(saveMenu);
fileMenu.add(exitMenu);
editMenu.add(cutMenu);
editMenu.add(copyMenu);
editMenu.add(pasteMenu);
helpMenu.add(infoMenu);
this.add(comboBox, BorderLayout.NORTH);
this.add(text, BorderLayout.SOUTH);
frame.setJMenuBar(menuBar);
add(new JButton("Select") {
{
addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
frame.dispose();
JOptionPane.showMessageDialog(frame, "IT WORKS!");

}
});
}
});

}

使用它您需要做的就是调用

  JPanel panel = new Bar(frame);

但是,这里的目标是使用 BorderLayout,因此我建议您将此调用放入开始:

 public Bar(final JFrame frame) {
super(new BorderLayout());
.... everything else
}

关于java - 如何使用通用 JPanel() 管理 BorderLayout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3059050/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com