Java JPanel中的JTable不显示
我不明白问题出在哪里。JTable嵌入在JScrollPanel中,JScrollPanel嵌入在JPanel中。该表未显示。谢谢你的帮助。我可能没有添加一些元素。检查得很彻底,但什么也没找到。这只是构造器:Java JPanel中的JTable不显示,java,swing,jtable,layout-manager,null-layout-manager,Java,Swing,Jtable,Layout Manager,Null Layout Manager,我不明白问题出在哪里。JTable嵌入在JScrollPanel中,JScrollPanel嵌入在JPanel中。该表未显示。谢谢你的帮助。我可能没有添加一些元素。检查得很彻底,但什么也没找到。这只是构造器: public TableIssues() { setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(100, 100, 894, 597); contentPane = n
public TableIssues() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 894, 597);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
JPanel patientsPanel = new JPanel();
patientsPanel.setBounds(6, 152, 882, 417);
patientsPanel.setLayout(null);
String[] patientsColumns = {
"one",
"two",
"three"};
String[][] tableInput={{"first","second","third"},{"first","second","third"}};
patientsTable = new JTable(tableInput,patientsColumns);
JScrollPane scroll = new JScrollPane();
scroll.setBounds(0, 0, 882, 363);
scroll.setLayout(null);
scroll.setViewportView(patientsTable);
patientsPanel.add(scroll);
JButton addPatietsButton = new JButton("Add");
addPatietsButton.setFont(new Font("Lucida Grande", Font.PLAIN, 20));
addPatietsButton.setBounds(356, 375, 211, 36);
patientsPanel.add(addPatietsButton);
contentPane.add(patientsPanel);
}
千万不要这样做:
scroll.setLayout(null);
您破坏了JScrollPane的布局,因此它完全失去了功能,从而击中了自己的脚。拆下那条线
虽然空布局和setBounds()
可能会像创建复杂GUI的最简单和最好的方式一样吸引新手,但您创建的GUI越多,在使用它们时遇到的困难就越严重。当GUI调整大小时,它们不会调整您的组件的大小,它们是一个需要增强或维护的皇家女巫,当它们放置在滚动窗格中时会完全失败,当在所有平台或屏幕分辨率与原始分辨率不同的情况下查看时,它们看起来非常糟糕
例如,这个GUI
由以下代码创建:
import java.awt.BorderLayout;
import java.awt.GridLayout;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
public class TableIssues2 extends JPanel {
private static final int GAP = 5;
private static final String[] COL_NAMES = {"One", "Two", "Three"};
private DefaultTableModel model = new DefaultTableModel(COL_NAMES, 0);
private JTable patientsTable = new JTable(model);
public TableIssues2() {
JPanel buttonPanel = new JPanel(new GridLayout(1, 0, GAP, GAP));
buttonPanel.add(new JButton("Add"));
buttonPanel.add(new JButton("Remove"));
buttonPanel.add(new JButton("Exit"));
JPanel bottomPanel = new JPanel();
bottomPanel.add(buttonPanel);
for (int i = 0; i < 5; i++) {
model.addRow(new String[]{"First", "Second", "Third"});
}
setBorder(BorderFactory.createEmptyBorder(GAP, GAP, GAP, GAP));
setLayout(new BorderLayout(GAP, GAP));
add(new JScrollPane(patientsTable), BorderLayout.CENTER);
add(bottomPanel, BorderLayout.PAGE_END);
}
private static void createAndShowGui() {
TableIssues2 mainPanel = new TableIssues2();
JFrame frame = new JFrame("TableIssues2");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.getContentPane().add(mainPanel);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGui();
}
});
}
}
导入java.awt.BorderLayout;
导入java.awt.GridLayout;
导入javax.swing.*;
导入javax.swing.table.DefaultTableModel;
公共类TableIssues2扩展了JPanel{
专用静态最终内部间隙=5;
私有静态最终字符串[]COL_NAMES={“一”、“二”、“三”};
私有DefaultTableModel=new DefaultTableModel(列名称,0);
私有JTable patientsTable=新JTable(模型);
公开表格问题2(){
JPanel buttonPanel=新的JPanel(新的网格布局(1,0,间隙,间隙));
添加(新的JButton(“添加”));
添加(新的JButton(“删除”));
添加(新的JButton(“退出”));
JPanel bottomPanel=新的JPanel();
底部面板。添加(按钮面板);
对于(int i=0;i<5;i++){
addRow(新字符串[]{“第一”、“第二”、“第三”});
}
setBorder(BorderFactory.createEmptyByOrder(间隙,间隙,间隙));
setLayout(新边界布局(间隙,间隙));
添加(新的JScrollPane(patientsTable),BorderLayout.CENTER);
添加(底部面板,边框布局。第_页结束);
}
私有静态void createAndShowGui(){
TableIssues2主面板=新建TableIssues2();
JFrame=新JFrame(“表问题2”);
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.getContentPane().add(主面板);
frame.pack();
frame.setLocationByPlatform(真);
frame.setVisible(true);
}
公共静态void main(字符串[]args){
SwingUtilities.invokeLater(新的Runnable(){
公开募捐{
createAndShowGui();
}
});
}
}
请参见“编辑以回答示例代码”。