2013-11-27 77 views
1

我正在開發一個Java GUI程序來存儲一些管理數據。設置JTextField在JPanel中的固定大小

現在我想從我的數據庫(mysql)顯示eventdata到使用JTextField的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); 

} 

在此先感謝

+0

1)爲了更好地幫助越早,張貼[SSCCE](http://sscce.org/)(因子出DB)2)提供GUI的ASCII藝術,因爲它應該以最小的尺寸出現並且(如果可調整大小)以及額外的寬度/高度。 3)while(rs.next()== true){'建議'JTable'而不是許多組件。 –

回答

4
  1. 這是因爲你用BoxLayout,嘗試使用FlowLayout這是默認JPanel或其他。
  2. 在下一個聲明pnData.add(txtEventList, BorderLayout.CENTER);,BorderLayout.CENTER不起作用,因爲您沒有爲您的面板使用BorderLayout
  3. 對於固定尺寸JTextField,請使用constructorJTextField(int cols)
  4. 爲您的目的使用JTable推薦@AndrewThompson。 Tutorial for table
  5. 呼叫frEventEdit.setVisible(true);在施工結束或下一個像:

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

謝謝,這非常有幫助!現在我通過使用JTable來解決它,正如AndrewThompson所說,花了我一段時間才弄清楚,但我現在明白了!謝謝! – Sytham

相關問題