在JPanel中显示JTable

时间:2014-10-15 13:01:22

标签: java swing jtable jpanel jlabel

我一直在尝试将JTable添加到我的JPanel中,但它并没有出现在那里。我已经搜索了其他问题,但那里提出的解决方案并没有帮助我。

下面的函数是扩展JFrame的类的一部分。 “repaint”是一个BufferedImage,“imageLabel”是JLabel,“image”是ImageIcon。

public void showTable() {
    try {
        repaint = ImageIO.read(new File("filename.jpg"));
    } catch (IOException e) { }

    Graphics g = repaint.createGraphics();
    g.setFont(font);
    g.setColor(black);
    String[] columnsName = {"id","text"};
    Object[][] data = {{new Integer(1),"text one"},{new Integer(2),"text two"}};
    JTable table = new JTable(data, columnsName);
    JScrollPane tableContainer = new JScrollPane(table);
    image = new ImageIcon(repaint.getScaledInstance(sizeX,sizeY, Image.SCALE_SMOOTH));
    imageLabel.setIcon(image);
    imageLabel.add(tableContainer,BorderLayout.CENTER);
    getContentPane().add(imageLabel);

    pack();
    setVisible(true);
    repaint();
    revalidate();
}

我想要实现的是在加载的图像上显示表格。

提前感谢您的帮助:)

3 个答案:

答案 0 :(得分:2)

  1. 通过setLayout(new BorderLayout())为您的JLabel提供布局管理器,此处为BorderLayout。
  2. 不要通过getGraphics()获取Graphics对象,因为它返回一个短暂的对象。要自己查看,请最小化您的程序,然后将其恢复并观察您的绘图消失。相反,请使用paintComponent(...)覆盖方法。
  3. 阅读Swing教程,了解有关如何执行这些操作的更多详细信息,尤其是布局管理器教程。

答案 1 :(得分:1)

我不确定我是否理解正确,但你想在它下面放一张桌子和一张图片,对吗? 我将使用BorderLayout创建一个JPanel,将图像(JLabel)放在底部(页面结束)和表格(您创建的scrollPanel)放在中心。 如果您需要有关使用BorderLayout向JPanel添加项目的帮助,请参阅本教程中的操作方法: http://docs.oracle.com/javase/tutorial/uiswing/layout/border.html

我希望它有所帮助。

答案 2 :(得分:-1)

感谢目前为止提供的所有提示:)它们非常有用。我知道我可能会以一种不优雅的方式做一些事情,但我还在学习,会努力提高:)

给定的提示和更多搜索引导我使用这样的代码:

    public void showTable()
    {
    try
    {
        repaint = ImageIO.read(new File("filename.jpg"));
    }catch (IOException e) {
    }
    Graphics g = repaint.createGraphics();
    g.setFont(font);
    g.setColor(black);
    String[] columnsName = {"id","text"};
    Object[][] data = {{new Integer(1),"text one"},{new Integer(2),"text two"}};
    JTable table = new JTable(data, columnsName);
    table.setOpaque(false);
    JScrollPane tableContainer = new JScrollPane(table);
    tableContainer.setBorder(BorderFactory.createEmptyBorder());
    tableContainer.setOpaque(false);
    tableContainer.getViewport().setOpaque(false);
    image = new ImageIcon(repaint.getScaledInstance(sizeX,sizeY, Image.SCALE_SMOOTH));
    imageLabel.setIcon(image);
    imageLabel.setLayout(new BorderLayout());
    imageLabel.add(tableContainer, BorderLayout.SOUTH);
    repaint();
    revalidate();
    }

哪种方式适合我:)

再次感谢大家的帮助:)