在处理JFrame的事件中,JTextField太大了

时间:2013-02-17 19:48:10

标签: java jtextfield

我是JAVA编程的新手,我试图在下面进行内存修改GUI程序是代码。我的JTextField对于如何解决这个问题的建议太大了?如果找到另一种方法来完成上述任务,我也将不胜感激。谢谢你的时间

JMenuBar menubar;
JMenu data,array,linkedlist,strings,stacks,tree,graphs,queues;
JMenuItem dtypeint,dtypefloat,dtypechar;

public GUI(){
    super("Data Structures Assignment");
    System.out.println("Select the Above mentioned Options for Memory Modification");
    setLayout(new FlowLayout());
    menubar = new JMenuBar();
    add(menubar);

    data = new JMenu("Basic Data Types");
    menubar.add(data);

    array = new JMenu("Arrays");
    menubar.add(array);

    linkedlist = new JMenu("Linked List");
    menubar.add(linkedlist);

    strings = new JMenu("Strings");
    menubar.add(strings);

    stacks = new JMenu("Stacks");
    menubar.add(stacks);

    tree = new JMenu("Tree");
    menubar.add(tree);

    graphs = new JMenu("Graphs");
    menubar.add(graphs);

    queues = new JMenu("Queues");
    menubar.add(queues);

    dtypeint = new JMenuItem("Integer");
    data.add(dtypeint);

    dtypefloat = new JMenuItem("Float");
    data.add(dtypefloat);

    dtypechar = new JMenuItem("Character");
    data.add(dtypechar);

    setJMenuBar(menubar);

    thehandler handler = new thehandler();
    dtypeint.addActionListener(handler);
    dtypefloat.addActionListener(handler);
    dtypechar.addActionListener(handler);
}
private class thehandler implements ActionListener{
    public void actionPerformed(ActionEvent event){

        if(event.getSource()==dtypeint){
            setLayout(new GridLayout());
            Frame F = new JFrame();
            F.setVisible(true);
            F.setSize(200,200);
            final JTextField item1;
            item1 = new JTextField("Word Size");
            item1.setColumns(15);
            F.add(item1);

        }
    }
}

}

2 个答案:

答案 0 :(得分:1)

JFrame的默认布局是BoderLayout。默认情况下,组件将添加到BorderLayout的CENTER中,并将调整大小以占用所有可用空间。因此,您需要使用适当的布局管理器组合来获得所需的效果。

也许有点像:

//F.add(item1);
JPanel panel = new JPanel(); // uses FlowLayout by default
panel.add(item1);
F.add(panel, BorderLayout.NORTH);

阅读Layout Managers上的Swing教程,了解更多信息和示例。

答案 1 :(得分:0)

  • 删除F.setSize(200,200)
  • F.add(item1)行之后,添加F.pack()
  • 最后,移动F.setVisible(true)行,使其位于F.pack()行之后;在完成构建之前,不应该显示框架。

pack()方法设置窗口的大小以适应其包含的组件的首选大小。