gpt4 book ai didi

java - 无法显示选项卡式 JTable 的表头

转载 作者:行者123 更新时间:2023-12-02 10:54:07 25 4
gpt4 key购买 nike

我有一个 JTabbedPane,它的选项卡中包含三个表。 JTabbedPane 同样位于 JScrollPane 中。我想显示一个修复表头,它遵循每个表的架构 {"Client", "Action", "Location", "Value"} 。当我尝试在 ActionListener 中设置 header (见下文)时,我可以使用其他方法(例如最初设置 header )。

其他 SO-posts 正在解决相同的问题,但我无法显示表头。唯一有效的是将数据添加到上述 ActionListener 中的表中。我不明白为什么没有显示标题,因为我以 String 矩阵的形式传递数据以及表示标题的 String 数组。

首先,这是有关我的表的代码片段,该代码在 GUI 启动时执行(我的 initialize() 方法)。

    tabbedPane = new JTabbedPane(JTabbedPane.TOP);
tabbedPane.setBorder(new SoftBevelBorder(BevelBorder.LOWERED, null, null, null, null));
tabbedPane.setFont(new Font("Carlito", Font.PLAIN, 13));
tabbedPane.setBackground(Color.WHITE);
tabbedPane.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);

tableBefore = new JTable();
tabbedPane.addTab(descrTableBefore, null, tableBefore, null);
tableBefore.setFont(new Font("Carlito", Font.PLAIN, 13));
tableBefore.setFocusable(false);

tableMainTest = new JTable();
tabbedPane.addTab(descrTableMain, null, tableMainTest, null);
tabbedPane.setEnabledAt(1, true);
tableMainTest.setFont(new Font("Carlito", Font.PLAIN, 13));
tableMainTest.setFocusable(false);

tableAfter = new JTable();
tabbedPane.addTab(descrTableAfter, null, tableAfter, null);
tableAfter.setFont(new Font("Carlito", Font.PLAIN, 13));
tableAfter.setFocusable(false);

scrollTables = new JScrollPane();
scrollTables.setBounds(442, 11, 397, 490);
scrollTables.setViewportView(tabbedPane);
frmTestframework.getContentPane().add(scrollTables);

下面又是一个代码片段,但这次来自提到的 ActionListener,它被添加到一个按钮,该按钮将元素添加到 JTable。目前我正在尝试让它只与一张表一起工作:tableMainTest。这就是我尝试定义表头的方式:

    dataMatrixMain = new String[itemListMain.size()][];

for(int j = 0; j < itemListMain.size(); j++)
dataMatrixMain[j] = itemListMain.get(j);

modelMain = new DefaultTableModel(dataMatrixMain, header);

mainGUI.tableMainTest.setModel(modelMain);
  • header 是一个 String 数组,格式为 {"Client", "Action", "Location", "Value"}
  • itemListMain 是一个字符串数组列表
  • dataMatrixMainString 矩阵,将用于用数据填充我的表格

有谁知道,必须更改什么才能使标题可见?

编辑:

当程序启动时,用户将看到我的表格处于以下状态:

Table in the intial state

用户只会看到三个选项卡,其中的表格都是空的。

用内容填充表格是用户的工作。从 JList 中选取一个元素并提交后,表格将按以下方式填充:

Table filled with data

每次从JList提交所选元素后,它将直接显示在JTable中。我通过设置 JTableDefaultTableModel 来完成此操作。因此显示输入的元素就像预期的那样。只有标题不显示在条目上方。

编辑2:SSCCE

import java.awt.Color;
import java.awt.EventQueue;
import java.awt.Font;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.border.BevelBorder;
import javax.swing.border.SoftBevelBorder;
import javax.swing.table.DefaultTableModel;


public class GUIMain{

private JFrame frmKeyoperateTestframework;

public JTable tableBefore;
public JTable tableMainTest;
public JTable tableAfter;

public JTabbedPane tabbedPane;
public JScrollPane scrollTables;

/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
GUIMain window = new GUIMain();
window.frmKeyoperateTestframework.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}

/**
* Create the application.
*/
public GUIMain() {
initialize();
}

/**
* Initialize the contents of the frame.
*/
private void initialize() {

frmKeyoperateTestframework = new JFrame();
frmKeyoperateTestframework.setResizable(false);
frmKeyoperateTestframework.getContentPane().setBackground(Color.WHITE);
frmKeyoperateTestframework.setFont(new Font("Carlito", Font.PLAIN, 14));
frmKeyoperateTestframework.setTitle("GUI");
frmKeyoperateTestframework.setBounds(100, 100, 865, 584);
frmKeyoperateTestframework.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frmKeyoperateTestframework.getContentPane().setLayout(null);

tabbedPane = new JTabbedPane(JTabbedPane.TOP);
tabbedPane.setBorder(new SoftBevelBorder(BevelBorder.LOWERED, null, null, null, null));
tabbedPane.setFont(new Font("Carlito", Font.PLAIN, 13));
tabbedPane.setBackground(Color.WHITE);
tabbedPane.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);

scrollTables = new JScrollPane();
scrollTables.setBounds(446, 50, 397, 490);
scrollTables.setViewportView(tabbedPane);
frmKeyoperateTestframework.getContentPane().add(scrollTables);

// "5" to show, that only data rows are displayed
DefaultTableModel tableModel = new DefaultTableModel(new String[]{"Client", "Action", "Location", "Value"}, 5);

tableBefore = new JTable();
tableBefore.setName("tableBefore");
tableBefore.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
tableBefore.setModel(tableModel);
tabbedPane.addTab("Before", null, tableBefore, null);
tableBefore.setFont(new Font("Carlito", Font.PLAIN, 13));
tableBefore.setFocusable(false);

tableMainTest = new JTable();
tableMainTest.setName("tableMainTest");
tableMainTest.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
tableMainTest.setFont(new Font("Carlito", Font.PLAIN, 13));
tableMainTest.setFocusable(false);
tableMainTest.setModel(tableModel);
tabbedPane.addTab("Main", null, tableMainTest, null);
tabbedPane.setEnabledAt(1, true);

tableAfter = new JTable();
tableAfter.setName("tableAfter");
tableAfter.setModel(tableModel);
tableAfter.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
tabbedPane.addTab("After", null, tableAfter, null);
tableAfter.setFont(new Font("Carlito", Font.PLAIN, 13));
tableAfter.setFocusable(false);

tabbedPane.setSelectedComponent(tableMainTest);
}
}

最佳答案

我自己找到了解决方案。解决方案只是为每个表使用一个 JScrollPane,该表包含在 JTabbedPane 中。之前,整个 JTabbedPane 被包装在 JScrollPane 中。现在,每个选项卡都包含一个 JScrollPane 而不是 JTable。虽然删除旧的 JScrollPane 并将表格打包到自己的表格中听起来很简单,但需要花费一些精力来更改剩余的代码、修复它并使新代码适合表格的布局。图形用户界面。

我找到了一个很好的代码示例,它应该是什么样子 here .

下面是一个代码示例,JTabbedPaneJScrollPaneJTables 的组合必须如何工作:

    tabbedPane = new JTabbedPane(JTabbedPane.TOP);
tabbedPane.setBounds(446, 50, 397, 490);
tabbedPane.setBorder(new SoftBevelBorder(BevelBorder.LOWERED, null, null, null, null));
tabbedPane.setFont(new Font("Carlito", Font.PLAIN, 13));
tabbedPane.setBackground(Color.WHITE);
frame.getContentPane().add(tabbedPane); // JFrame

tableMainTest = new JTable();
tableMainTest.setName("tableMainTest");
tableMainTest.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
tableMainTest.setFont(new Font("Carlito", Font.PLAIN, 13));
tableMainTest.setFocusable(false);
tableMainTest.setModel(tableModel);

tableMainTest.setPreferredScrollableViewportSize(tableMainTest.getPreferredSize());
tableMainTest.changeSelection(0, 0, false, false);
tableMainTest.setAutoCreateRowSorter(true);

JScrollPane scrollMain = new JScrollPane(tableMainTest);
scrollMain.add(tableMainTest.getTableHeader());
scrollMain.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER );
scrollMain.setBounds(446, 50, 397, 490);

tabbedPane.addTab(descrTableMain, scrollMain);

关于java - 无法显示选项卡式 JTable 的表头,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38351158/

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