Java 将JTable添加到JScrollPane后,按钮可以';为什么不能点击?

Java 将JTable添加到JScrollPane后,按钮可以';为什么不能点击?,java,swing,Java,Swing,创建JScrollPane并将其添加到BorderLayout.CENTER后,无法单击JButton“OK” (按钮看起来已启用,但无法单击时) 如果我不创建JScrollPane,只需将JTable添加到JPanel选项卡,JButton“OK”将可单击。 这是为什么?如何解决?问题与将表格标题添加到面板有关。真的解释不了为什么。我必须调查一下。但是,当您向滚动窗格添加表时,它会隐式地为您添加表头。那就把它扔掉吧 public JFrame myUI = new JFrame(); publ

创建JScrollPane并将其添加到BorderLayout.CENTER后,无法单击JButton“OK”
(按钮看起来已启用,但无法单击时)
如果我不创建JScrollPane,只需将JTable添加到JPanel选项卡,JButton“OK”将可单击。
这是为什么?如何解决?

问题与将表格标题添加到面板有关。真的解释不了为什么。我必须调查一下。但是,当您向滚动窗格添加表时,它会隐式地为您添加表头。那就把它扔掉吧

public JFrame myUI = new JFrame();
public Container pane = myUI.getContentPane() ; 
private JTabbedPane tabbedPane = new JTabbedPane();
private void makeTabbedPane(){

    JPanel tabs = new JPanel();
    String tabsName = "tags";

        Object columnNames[] = { "id", "name"};
        Object rowData[][] = { 
                { "1", "Jean"},
                { "2", "Annie"}
            };
        DefaultTableModel model = new DefaultTableModel(rowData, columnNames);
        JTable tagsTable = new JTable(model);
        tagsTable.setRowHeight(24);
        JTableHeader header = tagsTable.getTableHeader();
        header.setFont(new Font("", Font.BOLD,20));
        JScrollPane jsp = new JScrollPane(tagsTable, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);


        tabs.setLayout(new BorderLayout());
        tabs.add(header, BorderLayout.NORTH);
        tabs.add(jsp, BorderLayout.CENTER);
        tabs.add(new JButton("OK"), BorderLayout.SOUTH);

        tabbedPane.addTab(tabsName, tabs);
    }
    myUI.add(tabbedPane);
}
这里有一个MCVE供其他人测试。也许其他人有一个解释:-)

//tabs.add(header, BorderLayout.NORTH);
import java.awt.BorderLayout;
import java.awt.Font;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.JTableHeader;

public class TestTable {
    public JFrame myUI = new JFrame();
    private JTabbedPane tabbedPane = new JTabbedPane();

    public TestTable() {
        makeTabbedPane();
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable(){
            public void run() {
                new TestTable();
            }
        });
    }

    private void makeTabbedPane() {

        JPanel tabs = new JPanel();
        String tabsName = "tags";

        Object columnNames[] = {"id", "name"};
        Object rowData[][] = {
            {"1", "Jean"},
            {"2", "Annie"}
        };
        DefaultTableModel model = new DefaultTableModel(rowData, columnNames);
        JTable tagsTable = new JTable(model);
        tagsTable.setRowHeight(24);
        JTableHeader header = tagsTable.getTableHeader();
        header.setFont(new Font("", Font.BOLD, 20));
        JScrollPane jsp = new JScrollPane(tagsTable, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);

        tabs.setLayout(new BorderLayout());
        //tabs.add(header, BorderLayout.NORTH);
        tabs.add(jsp, BorderLayout.CENTER);
        tabs.add(new JButton("OK"), BorderLayout.SOUTH);

        tabbedPane.addTab(tabsName, tabs);
        myUI.add(tabbedPane);
        myUI.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        myUI.pack();
        myUI.setLocationRelativeTo(null);
        myUI.setVisible(true);
    }
}