Java 设置JPanel中固定的JTextField的大小

Java 设置JPanel中固定的JTextField的大小,java,swing,jpanel,jtextfield,layout-manager,Java,Swing,Jpanel,Jtextfield,Layout Manager,在学校,我正在开发一个JavaGUI程序来存储一些管理数据 现在我想使用JTextField将数据库mysql中的eventdata显示到JPanel中, 我的问题是我无法修复JTextField的大小,因为它总是占据很多位置。见图 图片: 这是我的密码,有人给我一些提示吗?我是java新手: public void editEvent() { JFrame frEventEdit = new JFrame ("Event Edit Menu"); frEventEdit.set

在学校,我正在开发一个JavaGUI程序来存储一些管理数据

现在我想使用JTextField将数据库mysql中的eventdata显示到JPanel中, 我的问题是我无法修复JTextField的大小,因为它总是占据很多位置。见图

图片:

这是我的密码,有人给我一些提示吗?我是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); 

}
提前谢谢

之所以会出现这种情况,是因为您使用的是BoxLayout,尝试使用的是JPanel或其他应用程序的默认FlowLayout。 在下一个语句pnData.addtxtEventList,BorderLayout.CENTER,BorderLayout.CENTER不起作用,因为您的面板没有使用BorderLayout。 要固定JTextField的大小,请使用JTextFieldint cols。 出于您的目的,请使用@AndrewThompson推荐的JTable。 调用frEventEdit.setVisibletrue;在施工结束或类似情况下:

SwingUtilities.invokeLater(new Runnable() {

    @Override
    public void run() {
        frEventEdit.setVisible(true);
    }
});
之所以会出现这种情况,是因为您使用的是BoxLayout,尝试使用的是JPanel或其他应用程序的默认FlowLayout。 在下一个语句pnData.addtxtEventList,BorderLayout.CENTER,BorderLayout.CENTER不起作用,因为您的面板没有使用BorderLayout。 要固定JTextField的大小,请使用JTextFieldint cols。 出于您的目的,请使用@AndrewThompson推荐的JTable。 调用frEventEdit.setVisibletrue;在施工结束或类似情况下:

SwingUtilities.invokeLater(new Runnable() {

    @Override
    public void run() {
        frEventEdit.setVisible(true);
    }
});

1为了更快地获得更好的帮助,通过硬编码一些数据,在数据库中发布一个系数。2提供图形用户界面的ASCII艺术,因为它应该以最小的尺寸显示,如果可以调整大小,则具有额外的宽度/高度。3 while rs.next==true{建议使用JTable而不是许多组件。1为了更快地获得更好的帮助,请通过硬编码一些数据来发布DB的系数。2提供GUI的ASCII艺术,因为它应该以最小的大小显示,如果可以用额外的宽度/高度调整大小。3 while rs.next==true{建议使用一个JTable而不是许多组件。谢谢,这很有帮助!因为现在我用一个JTable修复了它,正如AndrewThompson所说,我花了一段时间才弄明白,但我现在明白了!谢谢!谢谢,这很有帮助!因为现在我用一个JTable修复了它,正如AndrewThompson所说,我花了一段时间才弄明白,但我现在明白了!谢谢!