设置在JPanel中修复的JTextField的大小

时间:2013-11-27 13:35:39

标签: java swing jpanel jtextfield layout-manager

for school我正在开发一个Java GUI程序来存储一些管理数据。

现在我想使用JTextField将我的DB(mysql)中的eventdata显示到JPanel中, 我的问题是我无法修复JTextField的大小,因为它总是占用很多地方(见图片)

图片:http://postimg.org/image/5pcklo5n1/

这是我的代码,有人提示吗? (我是java的新手):

public void editEvent() {
    JFrame frEventEdit = new JFrame ("Event Edit Menu");
    frEventEdit.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frEventEdit.setVisible(true);   
    frEventEdit.setSize(700, 500);


    //JPanel for displaying data
    JPanel pnData = new JPanel();
    pnData.setLayout(new BoxLayout(pnData, BoxLayout.PAGE_AXIS));
    pnData.add(Box.createRigidArea(new Dimension(0,5)));
    pnData.setBorder(BorderFactory.createEmptyBorder(10,10,10,10));
    pnData.setAutoscrolls(true);

    Statement stmt;
    try {
        stmt = mySql.createStatement();
        ResultSet rs = stmt.executeQuery("SELECT name, date, time, type, address, representative FROM events " ) ;
        while (rs.next() == true){
            System.out.println(rs.getString("name")+"  "+rs.getString("date")+"  "+rs.getString("time")+"  "+rs.getString("type")+"  "+rs.getString("address")+"  "+rs.getString("representative"));
            final JTextField txtEventList = new JTextField(rs.getString("name")+"  "+rs.getString("date")+"  "+rs.getString("time")+"  "+rs.getString("type")+"  "+rs.getString("address")+"  "+rs.getString("representative"));
            pnData.add(txtEventList, BorderLayout.CENTER);
        }

    } catch (SQLException e) {
        e.printStackTrace();
    }

    JScrollPane scroller = new JScrollPane(pnData);
    frEventEdit.add(scroller);
    frEventEdit.setLocationRelativeTo(null); 

}

提前致谢

1 个答案:

答案 0 :(得分:4)

  1. 之所以发生这种情况,是因为您使用了BoxLayout,请尝试使用FlowLayout或其他JPanel的默认设置。
  2. 在下一个声明pnData.add(txtEventList, BorderLayout.CENTER);中,BorderLayout.CENTER不起作用,因为您的面板没有使用BorderLayout
  3. 要修正JTextField的尺寸,请使用constructor JTextField(int cols)
  4. 出于您的目的,使用@AndrewThompson建议的JTableTutorial for table
  5. 在施工结束时拨打frEventEdit.setVisible(true);或像下一个一样:

    SwingUtilities.invokeLater(new Runnable() {
    
        @Override
        public void run() {
            frEventEdit.setVisible(true);
        }
    });