JTable 左上线不可见

JTable Left and Upper Lines are invisible

我正在尝试在 JTables 上显示一些数据:

private JTable table1 = new JTable() {
    
    
    private static final long serialVersionUID = 1L;
    
    @Override
    public boolean isCellEditable(int row, int column) {
        return false;
    }

};

private JScrollPane secTabFirst() {

    Object [][] data = {{"90"},{"1700"},{"60"},{"0.7"}, {"Globular"}, {"Sinusoidal"}};
    
    String[] columnNames = {"Parameters"};
    
    DefaultTableModel model = new DefaultTableModel(data, columnNames);
    
    table1.setModel(model);
    
    table1.setTableHeader(null);
    table1.setShowHorizontalLines(true);
    table1.setShowVerticalLines(true);
    //table1.setPreferredSize(new Dimension(150,240));
    //table1.setMaximumSize(new Dimension(150,240));
    
    
    JScrollPane tb1 = new JScrollPane(table1);
    
    tb1.setVisible(true);
    
    return tb1;
}

public static void main(String args[]){
 
 JPanel panel = new JPanel();

 panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));

 panel.add(secTabFirst());

}  

JTable 显示如下:

但是table的上边和左边的线是看不见的。此外,在 JScrollPane 中放置 table 后,它会显示 2 个暗框。

如何使线条可见而黑框消失?

谢谢,

MB

我尝试重现您的问题,但没有成功,JTable 默认情况下永远不会显示顶部和左侧边框,但这不是问题,因为它通常预期在 [=13] 内呈现=].正如@HovercraftFullOfEels 提到的,尝试给我们一个 Short, Self Contained, Correct (Compilable), Example

import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.border.EmptyBorder;
import javax.swing.table.DefaultTableModel;

public class TestApp {

    public TestApp() {
        initComponents();
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(TestApp::new);
    }

    private void initComponents() {
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JPanel panel = new JPanel();
        panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
        panel.setBorder(new EmptyBorder(10, 10, 10, 10));

        JTable table = new JTable() {
            private static final long serialVersionUID = 1L;

            @Override
            public boolean isCellEditable(int row, int column) {
                return false;
            }
        };

        Object[][] data = {{"90"}, {"1700"}, {"60"}, {"0.7"}, {"Globular"}, {"Sinusoidal"}};
        String[] columnNames = {"Parameters"};
        DefaultTableModel model = new DefaultTableModel(data, columnNames);
        table.setModel(model);
        table.setTableHeader(null);

        JScrollPane pane = new JScrollPane(table); // borders for top and left will be rendered thanks to JScrollPanes borders
        panel.add(pane);

        frame.add(panel);
        frame.pack();
        frame.setVisible(true);
    }

}

更新:

但是您可以自己设置 Border 以确保绘制顶部和左侧边框线:

table.setBorder(new LineBorder(Color.GRAY, 1));

这会产生(JTable 不在下面屏幕截图中的 JScrollPane 中以显示无干扰的边框):

我有一个似乎对我有用的不同解决方案, 我决定保持代码简单(我已将所有代码包含在构造函数中):

import javax.swing.*;

public class GUI {
  conn conn = new conn();
    // frame
    JFrame f;
    // Table
    JTable j;

    // Constructor
    GUI()
    {
        // Frame initiallization
        f = new JFrame();

        // Frame Title
        f.setTitle("JTable Example");

        // Data to be displayed in the JTable
        String[][] data = {
                { "data", "data", "data" },
                { "data", "data", "data" }
        };

        // Column Names
        String[] columnNames = { "data", "data", "data" };

        // Initializing the JTable
        j = new JTable(data, columnNames);
        j.setBounds(30, 40, 200, 300);

        // adding it to JScrollPane
        JScrollPane sp = new JScrollPane(j);
        f.add(sp);
        // Frame Size
        f.setSize(500, 200);
        // Frame Visible = true
        f.setVisible(true);
    }

    // Main
    public static void main(String[] args)
    {
        new GUI();
    }
}

这是输出: https://photos.app.goo.gl/itzwX8KXwNKbZsjT8

如有问题请回复本回答