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();
   }
}

如有帮助,我们将不胜感激

  1. 避免空布局,事实上,这会把你搞得一团糟,因为使用空布局,你必须完全指定调用组件的大小和位置。只是不要这样做。
  2. 不要在 MouseListener 中重新添加 JTables。而是给您的 JPanel 一个 JTable,并从 MouseListener 更改其模型。否则,您将添加多个没有意义的 JTable。
  3. 将您的 JTable 放入 JScrollPane
  4. 最好让您的 JPanel 使用 BorderLayout 并将 JScrollPane 置于 BorderLayout.CENTER 位置。

so I can create some dragable tables

如果您需要拖动 JTable 的能力,我建议您使用 JDesktopPaneJInternalFrames。您可以轻松地在桌面周围拖动内部框架。然后,您只需将 JTable\JScrollPane 添加到内部框架,就像添加到普通 JFrame 一样。

阅读有关 How to Use Internal Frames 的 Swing 教程部分,了解更多信息和工作示例。