所以我正在为 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/