jTable 在我创建的面板中不可见
jTable not visable in panel i have created
我已经创建了自己的面板版本,因此我可以创建一些可拖动的表格,但目前没有任何内容添加到我创建的面板上
面板class:
import javax.swing.*;
import java.awt.event.*;
import java.awt.Dimension;
import java.awt.Point;
public class Workspace extends JPanel implements MouseListener,MouseMotionListener{
private JTable t;
private DatabaseHandler d;
public Workspace(DatabaseHandler d ){
super();
this.d = d;
setPreferredSize(new Dimension(1000, 1000));
this.setLayout(null);
addMouseListener(this);
addMouseMotionListener(this);
}
public void load(String table){
t = new JTable(d.getTable(table));
//JScrollPane js=new JScrollPane(t);
this.add(t);
}
}
调用它的代码:
public class Display{
private JPanel leftPanel = new JPanel(new BorderLayout());
public JList list;
public JFrame frame;
private DatabaseHandler d = new DatabaseHandler("imdb");
private Workspace w = new Workspace(d);
public Display(){
//create the window
frame = new JFrame("FYP - Database Refactoring");
frame.getContentPane().add(w, BorderLayout.CENTER);
frame.setSize(1000,1000);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
list = new JList(d.getTableNames());
list.addMouseListener(new MouseAdapter(){
public void mousePressed(MouseEvent e){
JList l = (JList)e.getSource();
w.load((String)l.getSelectedValue());
frame.setVisible(true);
}
});
leftPanel.add(list);
JLabel l = new JLabel("workbench");
w.add(l);
frame.getContentPane().add(leftPanel, BorderLayout.LINE_START);
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
new Display();
}
}
如有帮助,我们将不胜感激
- 避免空布局,事实上,这会把你搞得一团糟,因为使用空布局,你必须完全指定调用组件的大小和位置。只是不要这样做。
- 不要在 MouseListener 中重新添加 JTables。而是给您的 JPanel 一个 JTable,并从 MouseListener 更改其模型。否则,您将添加多个没有意义的 JTable。
- 将您的 JTable 放入 JScrollPane
- 最好让您的 JPanel 使用 BorderLayout 并将 JScrollPane 置于 BorderLayout.CENTER 位置。
so I can create some dragable tables
如果您需要拖动 JTable 的能力,我建议您使用 JDesktopPane
和 JInternalFrames
。您可以轻松地在桌面周围拖动内部框架。然后,您只需将 JTable\JScrollPane
添加到内部框架,就像添加到普通 JFrame 一样。
阅读有关 How to Use Internal Frames 的 Swing 教程部分,了解更多信息和工作示例。
我已经创建了自己的面板版本,因此我可以创建一些可拖动的表格,但目前没有任何内容添加到我创建的面板上
面板class:
import javax.swing.*;
import java.awt.event.*;
import java.awt.Dimension;
import java.awt.Point;
public class Workspace extends JPanel implements MouseListener,MouseMotionListener{
private JTable t;
private DatabaseHandler d;
public Workspace(DatabaseHandler d ){
super();
this.d = d;
setPreferredSize(new Dimension(1000, 1000));
this.setLayout(null);
addMouseListener(this);
addMouseMotionListener(this);
}
public void load(String table){
t = new JTable(d.getTable(table));
//JScrollPane js=new JScrollPane(t);
this.add(t);
}
}
调用它的代码:
public class Display{
private JPanel leftPanel = new JPanel(new BorderLayout());
public JList list;
public JFrame frame;
private DatabaseHandler d = new DatabaseHandler("imdb");
private Workspace w = new Workspace(d);
public Display(){
//create the window
frame = new JFrame("FYP - Database Refactoring");
frame.getContentPane().add(w, BorderLayout.CENTER);
frame.setSize(1000,1000);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
list = new JList(d.getTableNames());
list.addMouseListener(new MouseAdapter(){
public void mousePressed(MouseEvent e){
JList l = (JList)e.getSource();
w.load((String)l.getSelectedValue());
frame.setVisible(true);
}
});
leftPanel.add(list);
JLabel l = new JLabel("workbench");
w.add(l);
frame.getContentPane().add(leftPanel, BorderLayout.LINE_START);
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
new Display();
}
}
如有帮助,我们将不胜感激
- 避免空布局,事实上,这会把你搞得一团糟,因为使用空布局,你必须完全指定调用组件的大小和位置。只是不要这样做。
- 不要在 MouseListener 中重新添加 JTables。而是给您的 JPanel 一个 JTable,并从 MouseListener 更改其模型。否则,您将添加多个没有意义的 JTable。
- 将您的 JTable 放入 JScrollPane
- 最好让您的 JPanel 使用 BorderLayout 并将 JScrollPane 置于 BorderLayout.CENTER 位置。
so I can create some dragable tables
如果您需要拖动 JTable 的能力,我建议您使用 JDesktopPane
和 JInternalFrames
。您可以轻松地在桌面周围拖动内部框架。然后,您只需将 JTable\JScrollPane
添加到内部框架,就像添加到普通 JFrame 一样。
阅读有关 How to Use Internal Frames 的 Swing 教程部分,了解更多信息和工作示例。