Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java jTable在我创建的面板中不可见_Java_Swing_Layout_Jtable - Fatal编程技术网

Java jTable在我创建的面板中不可见

Java jTable在我创建的面板中不可见,java,swing,layout,jtable,Java,Swing,Layout,Jtable,我已经创建了我自己版本的面板,因此我可以创建一些可拖动的表,但目前没有任何内容添加到我创建的面板上 面板类别: import javax.swing.*; import java.awt.event.*; import java.awt.Dimension; import java.awt.Point; public class Workspace extends JPanel implements MouseListener,MouseMotionListener{ private

我已经创建了我自己版本的面板,因此我可以创建一些可拖动的表,但目前没有任何内容添加到我创建的面板上

面板类别:

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();
   }
}
如有任何帮助,我们将不胜感激

  • 避免使用空布局,事实上这会把您搞砸,因为使用空布局时,您必须完全指定调用组件的大小和位置。不要这样做
  • 不要在鼠标侦听器中重新添加JTables。而是给你的JPanel一个JTable,并改变它的mouseStener模型。否则,您将添加多个jtable,这是没有意义的
  • 将JTable放入JScrollPane中
  • 最好让您的JPanel使用BorderLayout并将JScrollPane置于BorderLayout.CENTER位置
  • 避免使用空布局,事实上这会把您搞砸,因为使用空布局时,您必须完全指定调用组件的大小和位置。不要这样做
  • 不要在鼠标侦听器中重新添加JTables。而是给你的JPanel一个JTable,并改变它的mouseStener模型。否则,您将添加多个jtable,这是没有意义的
  • 将JTable放入JScrollPane中
  • 最好让您的JPanel使用BorderLayout并将JScrollPane置于BorderLayout.CENTER位置
  • 所以我可以创建一些可拖动的表

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

    有关更多信息和工作示例,请阅读上Swing教程的部分

    所以我可以创建一些可拖动的表

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


    有关更多信息和工作示例,请阅读上Swing教程的部分。

    使用空布局是个坏主意。你应该使用我知道,我会在我刚刚测试的时候添加一个布局,事实上,空布局把你搞砸了@你应该回答这个问题。@有点不知所措,那么这是一个糟糕的测试,再一次完全把你搞砸了。您的JTable也应该保存在JScrollPane中。使用空布局是个坏主意。你应该使用我知道,我会在我刚刚测试的时候添加一个布局,事实上,空布局把你搞砸了@你应该回答这个问题。@有点不知所措,那么这是一个糟糕的测试,再一次完全把你搞砸了。您的JTable也应该保存在JScrollPane中。