这让我非常生气,我已经为此工作了 2 天,打开了 2 本书并浏览了它们,但仍然无法让这个程序按照我想要的方式运行。我已经到了如果这没有帮助,我就会退出的地步。
我想要一个简单的框架应用程序。 它有一个位于顶部中心的 JComboBox。 旁边是一个足够大的文本字段,可以显示数字,例如“$49.99” 下面是显示服务条款的文本区域 下面是同意服务条款的复选框 下面是 2 个按钮“接受”和“拒绝”
我已经为此工作了两天,这是编码:
public class Bar extends JFrame implements ActionListener
{
public Bar(final JFrame frame)
{
String[] tests = { "A+ Certification", "Network+ Certification", "Security+ Certification", "CIT Full Test Package" };
JButton button = new JButton("Click Meh");
add(new JLabel("Welcome to the CIT Test Program "));
add(new JLabel("Please select which Test Package from the list below."));
frame.setVisible(true);
frame.setSize(250,250);
JPanel pane1 = new JPanel(new FlowLayout());
JPanel pane2 = new JPanel(new FlowLayout());
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)");
saveMenu.addActionListener(this);
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);
frame.setJMenuBar(menuBar);
JComboBox packageChoice = new JComboBox(tests);
frame.add(packageChoice);
}
public void actionPerformed(ActionEvent e)
{
Object source = e.getSource();
{
}
}
编辑: 忘记添加第二个程序
public class JFrameWithPanel
{
public static void main(String[] args)
{
JPanel panel = new Bar(new JFrame("CIT Test Program"));
}
}
如何让它拥有我想要的一切并显示出来?因此我很困惑,现在几乎不知道框架是如何工作的。
最佳答案
Swing 中的组件必须按一定的顺序布局。
您从 JFrame 开始。放置在 JFrame 中的唯一组件是 JMenuBar 和 JPanel。您无需在 JFrame 中添加任何其他组件。您在 JPanel 中添加组件。
这是 Nick 的代码,经过重新组织,以正确的顺序定义组件。我使用 GridLayout 因为它更快。正如 Nivas 所说,您应该使用 GridBagLayout。
public class Bar {
private static final long serialVersionUID = 1L;
public Bar(final JFrame frame) {
JMenuBar menuBar = buildMenuBar();
frame.setJMenuBar(menuBar);
JPanel masterPanel = new JPanel(new GridLayout(2, 1));
JPanel pane1 = new JPanel(new GridLayout(3, 1));
pane1.add(new JLabel("Welcome to the CIT Test Program "));
pane1.add(new JLabel("Please select which Test Package from the list below."));
JButton button = new JButton("Click Me");
pane1.add(button);
JPanel pane2 = new JPanel(new GridLayout(1, 1));
String[] tests = { "A+ Certification", "Network+ Certification",
"Security+ Certification", "CIT Full Test Package" };
JComboBox packageChoice = new JComboBox(tests);
pane2.add(packageChoice);
masterPanel.add(pane1);
masterPanel.add(pane2);
frame.add(masterPanel);
frame.pack();
frame.setVisible(true);
// frame.setSize(250, 250);
}
public JMenuBar buildMenuBar() {
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)");
saveMenu.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
}
});
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);
return menuBar;
}
}
我将 JMenuBar 代码移至其自己的方法中,因此希望代码的其余部分更容易理解。
我有一个主 JPanel,所有其他组件都添加到其中。
我使用另一个 JPanel 来保存两个 JLabel 和 JButton。
我使用了第三个 JPanel 来保存 JComboBox。
基本模式如下:
- 定义 JPanel。
- 定义组件。
- 将组件添加到 JPanel。
- 将 JPanel 添加到主 JPanel
- 将主 JPanel 添加到 JFrame。
关于java - JFrame 无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3062221/