gpt4 book ai didi

java - 将 JTable 添加到 JTabbedPane 内的 JScrollPane

转载 作者:行者123 更新时间:2023-11-30 06:28:14 26 4
gpt4 key购买 nike

我正在尝试将 JTable 放入 JScrollPane 中。 JScrollPane 位于 JPanel 内部,它是 JTabbedPane 的一部分。

这是代码:

JScrollPane scrollPane = new JScrollPane(); 
scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);

JPanel pnlMaxMinAvg1 = new JPanel();
scrollPane.setViewportView(pnlMaxMinAvg1);
tabbedPane.addTab("MaxMinAvg1", null, pnlMaxMinAvg1, null);
pnlMaxMinAvg1.setLayout(new BorderLayout(0,0));

table = new JTable();
table.setModel(new DefaultTableModel(
new Object[][] {{"V_L1_N_RMS_AVG", null}
},
new String[] {
"Variable", "Value"
}
));
table.setBounds(178, 11, 200,300);

scrollPane.add(table);

当我运行此命令时,不显示table。如果我设置:

pnlMaxMinAvg1.add(table);

然后可见。

为什么?

最佳答案

当您将 JPanelpnlMaxMinAvg1 设置为 scrollPane 的视口(viewport) View 时,它是空的。将table 添加到pnlMaxMinAvg1 可为滚动 Pane 提供一些要显示的非空内容。此外,避免使用 setBounds() 并让布局来完成工作。在下面的示例中,滚动 Pane 的 View 显式设置为表,如您的片段中所示,但您可以在滚动 Pane 的构造函数中指定它。

image

import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;

/**
* @see https://stackoverflow.com/q/46669145/230513
*/
public class TableTest {

private void display() {
JFrame f = new JFrame("TableTest");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JTable table = new JTable();
table.setModel(new DefaultTableModel(
new Object[][]{{"V_L1_N_RMS_AVG", null}},
new String[]{"Variable", "Value"}
));
JScrollPane jsp = new JScrollPane();
jsp.setViewportView(table);
JTabbedPane jtp = new JTabbedPane();
jtp.add("TableTest", jsp);
f.add(jtp);
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
}

public static void main(String[] args) {
EventQueue.invokeLater(new TableTest()::display);
}
}

在此变体中,我添加了 N 行数据并重写了 Scrollable 方法 getPreferredScrollableViewportSize(),如 here 所示。调整封闭窗口的大小以查看它如何影响滚动条。

image2

import java.awt.Dimension;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;

/**
* @see https://stackoverflow.com/q/46669145/230513
*/
public class TableTest {

private static final int N = 16;

private void display() {
JFrame f = new JFrame("TableTest");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
DefaultTableModel model = new DefaultTableModel(
null, new String[]{"Variable", "Value"}
);
JTable table = new JTable(model) {

@Override
public Dimension getPreferredScrollableViewportSize() {
return new Dimension(256, getRowHeight() * N / 2);
}
};
for (int i = 0; i < N; i++) {
model.addRow(new Object[]{"V_L1_N_RMS_AVG" + i, String.valueOf(i)});
}
JScrollPane jsp = new JScrollPane();
jsp.setViewportView(table);
JTabbedPane jtp = new JTabbedPane();
jtp.add("TableTest", jsp);
f.add(jtp);
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
}

public static void main(String[] args) {
EventQueue.invokeLater(new TableTest()::display);
}
}

关于java - 将 JTable 添加到 JTabbedPane 内的 JScrollPane,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46669145/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com