0 java swing layout-manager flowlayout
我创建了一个扩展类 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);
}
}
Run Code Online (Sandbox Code Playgroud)
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();
}
}
Run Code Online (Sandbox Code Playgroud)
它不起作用的原因是因为FlowLayout尊重组件的首选大小,并且您没有指定自定义组件的首选大小.
您需要覆盖getPreferredSize()类的方法以将其大小返回到布局管理器可以完成其工作.
自定义绘画是通过覆盖paintComponent()方法完成的.另外,不要在绘画方法中进行I/O. 应该在类的构造函数中读取图像.
但是,问题是为什么要创建自定义组件?只需使用一个JLabel带ImageIcon.
如果您希望图像从顶部/左侧出现5个像素,则向标签添加边框:
label.setBorder( new EmptyBorder(5, 5, 5, 5) );
Run Code Online (Sandbox Code Playgroud)