面板上文本字段的大小和位置

时间:2014-03-14 13:39:00

标签: java swing jpanel jtextfield

package testerapplication;
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import java.io.*;
import java.util.*;
import javax.imageio.*;
import javax.swing.*;

public   class  TesterApplication {
    static JPanel CenterPanel;
    static JPanel UpperPanel;
    static JPanel CreationPanel;
    static JPanel UpCreationPanel;
    static JPanel DownCreationPanel;
    static JPanel MenuPanel;
    static JFrame frame;
    JTextField RoadNameTextField;
    JTextField BusNameTextField;
    JTextField StopNameTextField;
    TesterApplication(){
        JFrame frame=new JFrame("Bus Map");

        CenterPanel = new JPanel();
        CenterPanel.setBackground(Color.black);
        UpperPanel=new JPanel();
        UpperPanel.setLayout(new BoxLayout(UpperPanel,BoxLayout.Y_AXIS));

        MenuPanel=new JPanel();
        MenuPanel.setBackground(Color.red);
        CreationPanel=new JPanel();
        CreationPanel.setBackground(Color.blue);

        UpCreationPanel=new JPanel();
        UpCreationPanel.setBackground(Color.blue);
        DownCreationPanel=new JPanel();
        DownCreationPanel.setBackground(Color.green);

        //build text fields and put them into panel
        BusNameTextField= new JTextField("Bus ",10);
        StopNameTextField= new JTextField("Stope ",10);
        RoadNameTextField= new JTextField("Street ",10);

        UpCreationPanel.add(BusNameTextField);
        UpCreationPanel.setLayout(new BoxLayout(UpCreationPanel,BoxLayout.X_AXIS));

        DownCreationPanel.add(BorderLayout.WEST,StopNameTextField);
        DownCreationPanel.add( RoadNameTextField);

        CreationPanel.setLayout(new BoxLayout(CreationPanel,BoxLayout.Y_AXIS));
        CreationPanel.add(UpCreationPanel);
        CreationPanel.add(DownCreationPanel);

        UpperPanel.add(MenuPanel);
        UpperPanel.add(CreationPanel);

        frame.getContentPane().add(BorderLayout.NORTH, UpperPanel);
        frame.getContentPane().add(BorderLayout.CENTER,CenterPanel);
        frame.setSize(600, 480);
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    }
    public static void main(String[] args){
        new TesterApplication();
    }

}

enter image description here

[IMG] http://i60.tinypic.com/2yo3n21.png[/IMG]

问题是,或者更好。为什么BusNameTextField占用了所有窗口,为什么StopNameTextField不会进入窗口的WEST-end,并且没有Blue UpCreationPanel是正常的,同时还存在Green DownCreationPanel。

我的目的是让三个小的TextField全部放在左边," Stope"和"街"一个接一个地去。

1 个答案:

答案 0 :(得分:2)

默认情况下,JPanel使用FlowLayout。

如果您希望垂直显示组件,则可以使用垂直BoxLayoutGridBagLayout

修复代码以遵循Java命名约定。变量名称不以大写字符开头。 “CenterPanel”应该是“centerPanel”等。

最后不要使用静态变量。如果您对组件面板使用静态变量,则程序的设计是错误的。

阅读How to Use Layout Managers上Swing教程中的部分,了解有关布局的更多信息以及如何构建程序的更好示例,包括在事件调度线程上创建GUI。