【发布时间】:2015-09-21 19:59:02
【问题描述】:
我创建了一个扩展 JComponent 的类,并希望在 JPanel 上使用它。如果我设置了它的界限,我就不能以我想要的方式在FlowLayout 中使用它;它出现在JPanel 上,就好像它使用的是绝对定位一样。如果我不指定边界,它根本不会出现。有什么解决办法?
谢谢。
JMotor.java:
public class JMotor extends JComponent {
public void paint(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
BufferedImage img = null;
try {
img = ImageIO.read(new File("motor.jpg"));
}
catch (Exception e) {
}
g2.drawImage(img, 5, 5, this);
//setBounds(5, 5, 100, 50);
}
}
Scada.java:
public class Scada {
JFrame scadaFrame;
JPanel scadaPanel;
Scada () {
scadaFrame = new JFrame("Scada");
scadaFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
scadaPanel = new JPanel();
scadaPanel.add(new JSuruculuMotor());
scadaPanel.add(new JMotor());
scadaFrame.setContentPane(scadaPanel);
scadaFrame.setSize(600,300);
scadaFrame.setVisible(true);
}
public static void main(String[] args) {
new Scada();
}
}
【问题讨论】:
-
您是否尝试过使用 JPanel 代替 JComponent 并在其上绘制图像?
-
顺便说一句,如果您不需要该面板用于其他任何用途,您也可以只(删除自定义面板并)使用
new JLabel(new ImageIcon(imagePath))。 -
@AndrewThompson 是的,这就是我的想法。幸运的是,camickr 已经在他的回答中添加了这一点。
-
@LuxxMiner “幸运的是 camickr 已经在他的回答中添加了这一点。” LOL.. 没注意到!
-
以后不要在你的paint方法中加载资源
标签: java swing layout-manager flowlayout