[英]Java fit JDialog to JTable if table size is less than a set value
我有一個帶有兩個面板的JDialog:一個JTable和一個按鈕。 我想將JDialog設置為( maxHeight= 600 pixels
):
(1)如果表格高度小於maxLength
它將完全顯示表格,沒有空格,但是所有行都適合。
(2)如果高度大於maxHeight
,則將高度限制為maxHeight
並在側面顯示滾動條。
到目前為止,我已經完成了大多數JDialog的工作,但是我不知道如何控制JTable的高度。
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
public class TestGUI {
public static void main(String[] args) {
int a=10;
Object[][] data = new Object[a][2]; //Fill table with some data
for (int i = 0; i < a; i++) {data[i][0]=i; data[i][1]=i*i; }
JDialog dialog = new JDialog();
dialog.setLayout(new BorderLayout());
String[] header = {"Number", "Square"};
DefaultTableModel model = new DefaultTableModel(data, header);
JTable table = new JTable(model);
table.setPreferredScrollableViewportSize(new Dimension(450, 600));
table.setFillsViewportHeight(true);
JScrollPane js = new JScrollPane(table);
js.setVisible(true);
dialog.add(js, BorderLayout.CENTER);
JButton okButton = new JButton(new AbstractAction("OK") {
private static final long serialVersionUID = 1L;
public void actionPerformed(ActionEvent e) {
dialog.setVisible(false);
}
});
JPanel buttonPanel = new JPanel();
buttonPanel.add(okButton);
dialog.add(buttonPanel, BorderLayout.SOUTH);
//dialog.setSize(new Dimension(300, 600));
dialog.setMinimumSize(new Dimension(255, 175));
dialog.setVisible(true);
}
}
硬編碼像素大小幾乎從來都不是一個好主意。 其他用戶將不會使用與您相同的字體,即使那些用戶也可能使用不同的字體大小。 (A 12點的字體是一種字體其文本的行72分之12英寸高,因此,即使用戶具有相同的字體,用戶的顯示器的點距可能影響每個字符多少像素使用。)
而不是maxHeight,定義一個maxVisibleRows
變量。 您的表應使用getRowHeight根據所需的行數來計算其大小:
int visibleRows = model.getRowCount();
visibleRows = Math.max(1, visibleRows);
visibleRows = Math.min(maxVisibleRows, visibleRows);
Dimension size = table.getPreferredScrollableViewportSize();
size.height = table.getRowHeight() * visibleRows;
table.setPreferredScrollableViewportSize(size);
現在,您的JTable及其封閉的JScrollPane將具有與我認為要查找的一致的首選大小,這意味着您可以(並且應該)使用pack()。
dialog.pack();
dialog.setResizable(false);
如果表中可能有很多行,則應考慮避免對JDialog的大小進行任何限制。 如果有數百行,用戶將不會欣賞被迫一次只查看八行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.