首先,票數是代碼:的JTable中JScrollPane的內部的JPanel使用GridBagLayout的,不看,因爲它應該
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import javax.swing.JComponent;
import javax.swing.JButton;
import javax.swing.JToolBar;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.TableColumn;
@SuppressWarnings("serial")
public class Spielklasse extends JPanel{
private int iEntries = 1;
public Spielklasse(String strTitle){
setLayout(new GridBagLayout());
//dummy to fill vertical space
GridBagConstraints c = new GridBagConstraints();
c.gridx = 0;
c.gridy = 1000;
c.fill = GridBagConstraints.BOTH;
c.weightx=1;
c.weighty=1;
c.gridwidth = 2;
add(new JLabel(" "),c);
}
public void addEntry(JComponent component){
GridBagConstraints c = new GridBagConstraints();
c.anchor = GridBagConstraints.NORTHWEST;
c.gridx = 1;
c.gridy = iEntries;
c.weightx = 1;
c.insets = new Insets(10, 20, 10, 20);
c.fill = GridBagConstraints.HORIZONTAL;
add(component, c);
iEntries++;
}
public static JPanel addExampleTablePanel() {
String[] columnNames = { "first", "second", "third", "fourth", "fifth", "sixth" };
String[][] strArr = new String[100][columnNames.length];
for (int i = 0; i < strArr.length; i++) {
for (int j = 0; j < strArr[0].length; j++) {
strArr[i][j] = i + " xxxxx " + j;
}
}
JTable table = new JTable(strArr, columnNames) {
@Override
public Dimension getPreferredScrollableViewportSize() {
int headerHeight = getTableHeader().getPreferredSize().height;
int height = headerHeight + (10 * getRowHeight());
int width = getPreferredSize().width;
return new Dimension(width, height);
}
};
JScrollPane scrollPane = new JScrollPane(table, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
TableColumn column = null;
for (int i = 0; i < columnNames.length; i++) {
column = table.getColumnModel().getColumn(i);
column.setPreferredWidth(50);
column.setMaxWidth(50);
column.setMinWidth(50);
}
JToolBar toolBar = new JToolBar();
JButton btn = new JButton("test123");
toolBar.add(btn);
JPanel panel = new JPanel(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
c.fill = GridBagConstraints.HORIZONTAL;
c.gridy = 0;
c.weightx = 1;
c.weighty = 1;
c.gridwidth = 1;
c.anchor = GridBagConstraints.LINE_START;
panel.add(toolBar, c);
c.gridy = 1;
panel.add(scrollPane, c);
return panel;
}
public static void main(String[] args) {
Spielklasse mainPanel = new Spielklasse("test");
mainPanel.addEntry(addExampleTablePanel());
mainPanel.addEntry(addExampleTablePanel());
mainPanel.addEntry(addExampleTablePanel());
JFrame frame = new JFrame();
frame.setSize(300, 400);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(new JScrollPane(mainPanel));
frame.setVisible(true);
}
}
類「Spieklasse」應該創建一個JPanel不同類型,如表的多個條目,文本框等
在這個例子中,只需要添加3個含JTable的面板。
此JTable位於JSrollPane中,應具有固定的列寬。 此JScrollPane位於JPanel內部,其中包含表格上方的工具欄以執行某些操作等。 此JPanel已添加到「Spielklasse」類型的主面板中。 主面板位於另一個JScrolLPane中。
這裏是問題: - 桌面應該有一個固定的高度,我可以設置像我想要的。在代碼示例中,大小已經固定,但我不知道爲什麼和它的大小錯誤:-) - 在表格中應該出現水平滾動條,當框架的大小小於表格的大小時(所有專欄一起)。當幀較大,萬萬應該被拉伸水平(作品已經)
我希望我的解釋是不夠好,有人能幫助我:-)
編輯:以改善camickr的更新,垂直尺寸的問題解決了。
嗨,非常感謝,這解決了垂直尺寸問題。但橫向尺寸仍不正確。當表格的大小大於框架的大小時,我想要一個水平滾動條出現在表格的下面。但是桌子的水平尺寸保持在全寬。 – ohoeppner
@ user3418986,現在你有一個面板添加到框架的單個滾動條。如果你建議你在每張桌子上都有單獨的滾動條,但不要在面板上,那麼我相信你可以使用[可滾動面板](http://tips4java.wordpress.com/2009/12/20/scrollable-panel) /)。您可以將面板配置爲「適合」在滾動窗格的視口中。因此內部面板的尺寸會更小,所以您應該在每張桌子上放置滾動條。請參閱編輯。 – camickr
好了,現在它的作品:)非常感謝,解決了這花了我很多時間。 – ohoeppner