【问题标题】:jTable not visable in panel i have createdjTable 在我创建的面板中不可见
【发布时间】:2016-02-28 12:00:55
【问题描述】:

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

面板类:

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

如有任何帮助,将不胜感激

【问题讨论】:

  • 使用空布局是个坏主意。你应该使用a real layout manager
  • 我知道,我现在正在测试中添加一个布局
  • 事实上,空布局把你搞砸了。 @resueman:你应该回答这个问题。 @ 有点不知所措,那么这是一个 bad 测试,又完全把你搞砸了。您的 JTable 也应该保存在 JScrollPane 中。

标签: java swing layout jtable


【解决方案1】:
  1. 避免使用 null 布局,事实上这会让您感到困惑,因为使用 null 布局,您必须完全指定调用组件的大小和位置。只是不要这样做。
  2. 不要在 MouseListener 中重新添加 JTable。而是给您的 JPanel 一个 JTable,并从 MouseListener 更改其模型。否则,您将添加多个没有意义的 JTable。
  3. 将您的 JTable 放入 JScrollPane 中
  4. 最好让您的 JPanel 使用 BorderLayout 并将 JScrollPane 放入 BorderLayout.CENTER 位置。

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2021-08-19
      • 1970-01-01
      • 1970-01-01
      • 2013-04-19
      • 1970-01-01
      • 2014-01-24
      • 2014-08-19
      • 2013-02-19
      • 2022-08-05
      相关资源
      最近更新 更多