2015-06-03 66 views
0

我有一個JPanel從一個類返回,然後一個按鈕被添加到它的底部在一個新的面板。使JPanel動態地適合JDialog

的代碼是這樣的:

String csv = csvName.getText(); 
String csvN = (String)ss.getSelectedItem()+csv+".csv"; 
JPanel f = T1Data.program(csvN); 

JDialog desktopFrame = new JDialog(); 
desktopFrame.add(f); 
desktopFrame.setModal(true); 
desktopFrame.setSize(900, 500); 
desktopFrame.setVisible(true); 

這是T1Data.program類。

public static JPanel program(String csvName) { 

    JPanel f = new JPanel(new BorderLayout()); 

    try { 

     String path = System.getProperty("user.dir"); 

     String datafile = path+csvName; 
     FileReader fin = new FileReader(datafile); 
     DefaultTableModel m = createTableModel(fin, null); 
     JTable table = new JTable(m); 
     JScrollPane stable = new JScrollPane (table); 
     stable.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED); 
     stable.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); 
     table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); 

     f.add(stable,BorderLayout.NORTH); 
     JButton btn = new JButton("Save Edits"); 
     f.add(btn,BorderLayout.SOUTH); 

     btn.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent arg0) { 
       toExcel(m, new File(path+csvName)); 
       JOptionPane.showMessageDialog(f, "Saved CSV File!"); 
      } 
     }); 


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

    return f; 

} 

當我運行它時,它會顯示正常和所有適合。我在評論中發佈了一個鏈接,因爲我現在不能在帖子中發佈3個鏈接。

如果我做得更小,發生這種情況:http://i.gyazo.com/0d7792cc11eaaba66c6743f5cb5addd7.png水平條和保存按鈕消失。

如果我做得更大,會發生這種情況:http://gyazo.com/b4820450324d308ea4b4710af8acc6a7.png JTable下有很大的差距。

我該如何解決這個問題,以便JTable動態調整大小以適合JDialog?

+0

http://i.gyazo.com/7839a99436ae55931a7dcf7e9f93048a.png這是它看起來像通常的鏈接。 –

+0

你爲什麼要調用table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); ? – ControlAltDel

+0

因爲那麼如果我改變列寬度其他列變得更小,所以我寧願水平滾動在那裏@ControlAltDel –

回答

1

你可能想改變這一點:

f.add(stable,BorderLayout.NORTH); 

這樣:

f.add(stable, BorderLayout.CENTER); 

JScrollPane中,應放置在一個BorderLayout的中心,因爲中心部分將在水平和垂直方向上拉伸當父母被調整大小時。邊緣組件僅在一個維度上伸展,這通常不是JScrollPane的意圖。

+0

繁榮!感謝:D –