【问题标题】:Set the size of JTextField fixed in a JPanel设置固定在 JPanel 中的 JTextField 的大小
【发布时间】:2013-12-13 04:23:03
【问题描述】:

对于学校,我正在开发一个 Java GUI 程序来存储一些管理数据。

现在我想使用 JTextField 将我的数据库(mysql)中的事件数据显示到 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) 为了尽快获得更好的帮助,请发布SSCCE(通过硬编码一些数据来排除数据库。2)提供 GUI 的 ASCII 艺术,因为它应该以最小的尺寸出现并且(如果可调整大小) 具有额外的宽度/高度。 3) while (rs.next() == true){ 建议使用JTable 而不是许多组件。

标签: java swing jpanel jtextfield layout-manager


【解决方案1】:
  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);
        }
    });
    

【讨论】:

  • 谢谢,帮助很大!现在我通过使用 JTable 修复它,正如 AndrewThompson 所说,我花了一段时间才弄清楚,但我现在明白了!谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-15
  • 1970-01-01
  • 2014-04-29
  • 1970-01-01
  • 2014-09-19
  • 1970-01-01
相关资源
最近更新 更多