如何使 table 可滚动?
How can I make this table scrollable?
我这里有这个 table,它应该显示 Integer.MAX_VALUE
多行具有滚动功能,但没有滚动窗格,即使我添加了一个。有人可以阐明需要做什么 changed/added 吗?
import java.awt.*;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
import java.util.Locale;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;
class DynamicTableModel extends AbstractTableModel {
final static String[] headers = {"Seconds Since Epoch", "Formatted Timestamp"};
private static String getPrettyStringFromEpochSeconds(int seconds) {
LocalDateTime dateTime = LocalDateTime.ofEpochSecond(seconds, 0, ZoneOffset.UTC);
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("h:mm:ss a EEEE, MMMM d, yyyy", Locale.ENGLISH);
String formattedDate = dateTime.format(formatter);
return formattedDate;
}
@Override
public int getRowCount() {
return Integer.MAX_VALUE;
}
@Override
public int getColumnCount() {
return headers.length;
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
return (columnIndex == 0) ? rowIndex : getPrettyStringFromEpochSeconds(rowIndex);
}
}
public class GoodTable extends JPanel{
JTable jt;
public GoodTable(){
DynamicTableModel model = new DynamicTableModel();
JTable table = new JTable(model);
//table.setPreferredScrollableViewportSize(new Dimension(500,300));
table.setFillsViewportHeight(true);
JScrollPane js=new JScrollPane(table);
js.setVisible(true);
add(js);
}
public static void main(String[] args) {
JFrame jf=new JFrame();
GoodTable tab= new GoodTable();
jf.setTitle("Table");
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
jf.setSize(screenSize.width, screenSize.height);
jf.setVisible(true);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.add(tab);
}
}
使用 Integer.MAX_VALUE 时有限制。
当我使用时滚动有效:
public int getRowCount() {
//return Integer.MAX_VALUE / 15; // doesn't work
return Integer.MAX_VALUE / 16;
}
我使用了 16,因为这是 table 中每一行的高度。
因此最大首选大小为行 * 16,因为首选高度也受整数值限制。
我这里有这个 table,它应该显示 Integer.MAX_VALUE
多行具有滚动功能,但没有滚动窗格,即使我添加了一个。有人可以阐明需要做什么 changed/added 吗?
import java.awt.*;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
import java.util.Locale;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;
class DynamicTableModel extends AbstractTableModel {
final static String[] headers = {"Seconds Since Epoch", "Formatted Timestamp"};
private static String getPrettyStringFromEpochSeconds(int seconds) {
LocalDateTime dateTime = LocalDateTime.ofEpochSecond(seconds, 0, ZoneOffset.UTC);
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("h:mm:ss a EEEE, MMMM d, yyyy", Locale.ENGLISH);
String formattedDate = dateTime.format(formatter);
return formattedDate;
}
@Override
public int getRowCount() {
return Integer.MAX_VALUE;
}
@Override
public int getColumnCount() {
return headers.length;
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
return (columnIndex == 0) ? rowIndex : getPrettyStringFromEpochSeconds(rowIndex);
}
}
public class GoodTable extends JPanel{
JTable jt;
public GoodTable(){
DynamicTableModel model = new DynamicTableModel();
JTable table = new JTable(model);
//table.setPreferredScrollableViewportSize(new Dimension(500,300));
table.setFillsViewportHeight(true);
JScrollPane js=new JScrollPane(table);
js.setVisible(true);
add(js);
}
public static void main(String[] args) {
JFrame jf=new JFrame();
GoodTable tab= new GoodTable();
jf.setTitle("Table");
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
jf.setSize(screenSize.width, screenSize.height);
jf.setVisible(true);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.add(tab);
}
}
使用 Integer.MAX_VALUE 时有限制。
当我使用时滚动有效:
public int getRowCount() {
//return Integer.MAX_VALUE / 15; // doesn't work
return Integer.MAX_VALUE / 16;
}
我使用了 16,因为这是 table 中每一行的高度。
因此最大首选大小为行 * 16,因为首选高度也受整数值限制。