我一直在尝试将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();
}
我想要实现的是在加载的图像上显示表格。
提前感谢您的帮助:)
答案 0 :(得分:2)
setLayout(new BorderLayout())
为您的JLabel提供布局管理器,此处为BorderLayout。getGraphics()
获取Graphics对象,因为它返回一个短暂的对象。要自己查看,请最小化您的程序,然后将其恢复并观察您的绘图消失。相反,请使用paintComponent(...)
覆盖方法。答案 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();
}
哪种方式适合我:)
再次感谢大家的帮助:)