2014-01-15 80 views
1

我想在我的GUI上使用滾動窗格。該地區,我想有「滾動」是沒有任何LayoutManager的一個JPanel,因爲內容是靜態和動態之間的事情......但也許我的代碼的一部分將有助於JScrollPane動態填充JPanel,空佈局

這就是:

pane = getContentPane(); 

    jpane = new JPanel(); 
// jpane.setBounds(0, 75, 680, 255); 
    jpane.setLayout(null); 

    jsp = new JScrollPane(jpane, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); 
    jsp.setBounds(0, 75, 680, 255); 
    jsp.setPreferredSize(new Dimension(680,255)); 
pane.add(jsp); 

我的JPanel將充滿了這段代碼...

for(int i = 0; i < Integer.parseInt(spaltenzahl.getText()); i++) { 
     JTextField spaltennamen_feld = new JTextField(); 
     spaltennamen_feld.setBounds(10, 10+35*i, 150, 25); 
     spaltennamen_arraylist.add(spaltennamen_feld); 

     JComboBox<String> datentypen_box = new JComboBox<String>(types); 
     datentypen_box.setBounds(170, 10+35*i, 150, 25); 
     datentypen_arraylist.add(datentypen_box); 

     JComboBox<String> datenzusatz_box = new JComboBox<String>(comb); 
     datenzusatz_box.setBounds(330, 10+35*i, 100, 25); 
     datenzusatz_arraylist.add(datenzusatz_box); 

     jpane.add(spaltennamen_feld); 
     jpane.add(datentypen_box); 
     jpane.add(datenzusatz_box); 
    } 

的問題:我可以不加我的GUI的屏幕截圖,失蹤EHR的原因......我忘了這個要求的名字這裏的東西^ _^ 但我真正的問題是:滿溢的內容不會顯示在我的JPanel上,我的ScrollPane不滾動。任何想法?

非常感謝:)

+4

'「......但也許我的代碼將有助於部分......」' - 你想創造什麼,後是一個[最小,完整,有效的示例或MCVE](http://stackoverflow.com/help/mcve)。這樣我們可以測試和修改適當的代碼。另外,請詳細解釋一下null佈局的必要性,因爲您通常會發現,避免這些事情通常會更好,因爲一方面,它們對JScrollPanes不會很好。我敢打賭,你需要使用空佈局的感覺實際上是一個僞裝的[XY問題](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)。 –

+4

問題是'null'佈局。 JScrollPane依靠佈局管理器提供的信息來確定何時顯示滾動條。 *「是沒有任何LayoutManager的JPanel,因爲內容介於靜態和動態之間,」*是irrlevent。我有很多動態的用戶界面,並不意味着你應該放棄使用佈局管理器。主要的原因是,正如你發現的那樣,Swing API嚴重依賴於它們的使用和他們提供的信息...... – MadProgrammer

+0

@MadProgrammer:偉大的思想家都相信! –

回答

2

您的解決方案是不是以上所述。我認爲你想要使用一個JTable,一個有三列,最後兩個編輯器是JComboBox。


編輯
例如:

import java.util.Random; 
import java.util.Vector; 
import javax.swing.*; 
import javax.swing.table.DefaultTableModel; 

public class Foo2 { 

    private static void createAndShowGui() { 
     String[] columns = {"Spaltennamen", " Datentypen", "Datenzusatz"}; 
     String[] dataStrings1 = { "Monday", "Tuesday", "Wednesday", "Thursday", "Friday" }; 
     String[] dataStrings2 = {"One", "Two", "Three", "Four", "Five"}; 
     Random random = new Random(); 

     DefaultTableModel model = new DefaultTableModel(columns, 0); 
     int spaltenzahl = 10; // this can change 
     for (int i = 0; i < spaltenzahl; i++) { 
     Vector<String> rowData = new Vector<>(); 
     rowData.add("Row Number " + (i + 1)); 
     rowData.add(dataStrings1[random.nextInt(dataStrings1.length)]); 
     rowData.add(dataStrings2[random.nextInt(dataStrings2.length)]); 
     model.addRow(rowData); 
     } 

     JTable table = new JTable(model); 
     table.getColumn(columns[1]).setCellEditor(new DefaultCellEditor(new JComboBox<>(dataStrings1))); 
     table.getColumn(columns[2]).setCellEditor(new DefaultCellEditor(new JComboBox<>(dataStrings2))); 
     JScrollPane scrollPane = new JScrollPane(table); 


     JFrame frame = new JFrame("Foo"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.getContentPane().add(scrollPane); 
     frame.pack(); 
     frame.setLocationByPlatform(true); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
     public void run() { 
      createAndShowGui(); 
     } 
     }); 
    } 
} 
+0

+1我喜歡這裏的飛躍,這是一個好主意 – MadProgrammer

+0

非常感謝!它工作正常! :) –