java - GUI 中的 JTables 出现问题

标签 java swing user-interface jtable

所以我正在为 Java 电影租赁系统开发 GUI,这里有一种显示用户应该看到的内容的方法。

public void displayUser() //displays user screen/functionality
{
    getContentPane().removeAll();
    adminCheck = 1;

    menuBar = new JMenuBar();
    menu = new JMenu("Members");
    menuBar.add(menu);
    menu2 = new JMenu("Releases");
    menuBar.add(menu2);


    retrieveMember = new JMenuItem("Retrieve Member");
    menu.add(retrieveMember);
    retrieveRelease = new JMenuItem("Retrieve Release");
    menu2.add(retrieveRelease);

    JScrollPane c  = new JScrollPane();
    JScrollPane b = new JScrollPane();

    JTextField field1 = new JTextField("");
    JTextField field2 = new JTextField("");
    JTextField field3 = new JTextField("");
    JTextField field4 = new JTextField("");
    JTextField field5 = new JTextField("");
    JTextField field6 = new JTextField("");
    field1.setEditable(false);
    field2.setEditable(false);
    field3.setEditable(false);
    field4.setEditable(false);
    field5.setEditable(false);
    field6.setEditable(false);

    JPanel infoPanel = new JPanel(new GridLayout(0, 1));
    infoPanel.add(new JLabel("Last Name:"));
    infoPanel.add(field1);
    infoPanel.add(new JLabel("First Name:"));
    infoPanel.add(field2);
    infoPanel.add(new JLabel("Social Security #:"));
    infoPanel.add(field3);
    infoPanel.add(new JLabel("Email:"));
    infoPanel.add(field4);
    infoPanel.add(new JLabel("Phone Number:"));
    infoPanel.add(field5);
    infoPanel.add(new JLabel("Address"));
    infoPanel.add(field6);
    add(infoPanel, BorderLayout.CENTER);

    TableModel memberModel = new MemberTableModel();
    TableModel itemModel = new ItemTableModel();
    memberTable = new JTable(memberModel);
    releaseTable = new JTable(itemModel);

    c.add(memberTable);
    b.add(releaseTable);

    String[] searchMemberChoices = {"Search Members By:", "Last Name", "First Name","Phone Number", "Member ID"};
    String[] searchReleaseChoices = {"Search Releases By:", "Title" , "Category", "Type", "Release ID" };
    searchMember = new JComboBox(searchMemberChoices);
    searchRelease = new JComboBox(searchReleaseChoices);

    add(c, BorderLayout.WEST);
    add(b, BorderLayout.EAST);
    add(searchMember, BorderLayout.WEST);
    add(searchRelease, BorderLayout.EAST);
    add(menuBar, BorderLayout.NORTH);
    add(infoPanel, BorderLayout.CENTER);


    setVisible(true);
    setResizable(true);
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    repaint();

    insertMember.addActionListener(new MenuActionListener());
    deleteMember.addActionListener(new MenuActionListener());
    editMember.addActionListener(new MenuActionListener());
    retrieveMember.addActionListener(new MenuActionListener());
    insertRelease.addActionListener(new MenuActionListener());
    deleteRelease.addActionListener(new MenuActionListener());
    editRelease.addActionListener(new MenuActionListener());
    retrieveRelease.addActionListener(new MenuActionListener());
    searchMember.addActionListener(new ComboBoxActionListener());
    searchRelease.addActionListener(new ComboBoxActionListener());

}

我正在实现我自己的 TableModel 类(未显示),从 AbstractTableModel 扩展。
问题是 JTables(memberTable 和 itemTable)没有显示。我使用 TableModel 初始化表,声明两个 JScrollPanes,为每个 Pane 添加一个表,并将 Pane 添加到框架中。我不明白为什么它们不可见。有人可以提供一些帮助吗?

注意:这些表是全局声明的,超出了该方法的范围。

最佳答案

根据 JScrollPane API ,您不想将组件直接添加到 JScrollPanes,因为这会挤压它们的视口(viewport),而是希望将组件作为视口(viewport)的 View 添加到 JScrollPane 的视口(viewport)。

更改:

c.add(memberTable);
b.add(releaseTable);

c.setViewportView(memberTable);
b.setViewportView(releaseTable);

关于java - GUI 中的 JTables 出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29830654/

相关文章:

java - 如何在特定条件下拆分字符串

Java 通过 HashMap 从 Object[][] 返回 int

iOS - 按钮的自动布局/尺寸类别

java - 我怎样才能让这个timer()按我想要的方式工作?

java - 如何从数组列表获取和设置价格?

c# - 事件循环

javascript - 类似 iPhone 的(老虎机) 'picker' 网络选择框?

java - 通过代码进行 desc 命令

java - 在另一个应用程序的 JFrame 中使用按钮,而不将焦点放在 java 应用程序上?

java - 当我尝试使用改造上传图像时,我得到空值