这让我非常生气,我已经为此工作了2天,打开了2本书并查看过它们,而STILL无法让这个程序以我想要的方式运行。我已经到了如果这没有帮助的地步,我就退出了。
我想要一个SIMPLE Frame应用程序。 它有一个位于顶部的JComboBox。 旁边是一个足以显示数字的文本字段,例如“$ 49.99” 下面是显示服务条款的文本区域的位置 下面是同意服务条款的复选框 下面是2个按钮“接受”和“拒绝”
我已经为此工作了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"));
}
}
如何让我拥有所需的一切并显示出来?我很困惑因为这个,现在几乎没有得到帧的工作方式。
答案 0 :(得分:1)
尼克。我认为你要清除的第一件事就是确切地知道你想要什么。
我在这个问题中帮助过你https://stackoverflow.com/questions/3055777/how-to-...
根据您的描述,您已经拥有了所需要的东西。这有什么问题:
alt text http://img194.imageshack.us/img194/7038/capturadepantalla201006x.png
所以,我真的认为你应该清楚地描述你想要的东西,以便得到它。
我们会帮助您,但您必须明确定义您的问题所在。
答案 1 :(得分:1)
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。
基本模式如下:
答案 2 :(得分:0)
1。你的第二个程序不会编译。您正尝试将JFrame分配给JPanel。
应该是
JFrame frame = new Bar(new JFrame("CIT Test Program"));
2。有用。你想要的是什么。但不是你想要它,因为你没有告诉java你想要它如何显示。尝试使用LayoutManager之类的GridBagLayout。
如果您急于创建GUI,请尝试像NetBeans这样的IDE,通过拖放操作让您的工作更轻松。
编辑:
一个例子:
public class TestN extends JFrame
{
private JLabel label ;
private JComboBox combo;
private JButton button;
public TestN()
{
label = new JLabel("Label:");
combo = new JComboBox();
combo.addItem("Item 1");
combo.addItem("Item 2");
combo.addItem("Item 3");
setLayout(new GridBagLayout());
GridBagConstraints c1 = new GridBagConstraints();
c1.gridx = 0;
c1.gridy = 0;
c1.weightx = 1;
c1.weighty = 1;
add(label, c1);
GridBagConstraints c2 = new GridBagConstraints();
c2.gridx = 1;
c2.gridy = 0;
c2.weightx = 1;
c2.weighty = 1;
add(combo, c2);
button = new JButton("Ok");
GridBagConstraints c3 = new GridBagConstraints();
c3.gridx = 2;
c3.gridy = 0;
c3.weightx = 1;
c3.weighty = 1;
add(button, c3);
setTitle("Test");
setSize(200,100);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
public static void main(String[] args)
{
new TestN();
}
}
免责声明:这只是举个例子。不是生产代码; - )
答案 3 :(得分:0)
你有:
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);
每个Bar
对象都继承自JFrame
(即Bar
对象 类型为JFrame
,但您传入的是JFrame
{ {1}}构造函数中的object(frame
参数)。然后,您可以在Bar
对象上调用一些方法 - 例如添加两个JLabel
对象 - 以及传入的JFrame
上的一些方法 - 例如setVisible
和{{ 1}}方法。
因此,您有两个不同的setSize
个对象,并且您为每个对象做了一些工作,并且其中只有一个被设置为可见。
看起来你将JFrame
传递给构造函数的唯一原因是设置窗口的标题。如果您将带有标题的JFrame
传递给String
构造函数,然后将Bar
作为super(title);
构造函数的第一行,那么您将不需要传递 - 在Bar
根本