paintComponent(Graphics g)のメソッドをオーバーライドするJComponentを拡張するカスタムコンポーネントがありますが、これをJPanelに追加しようとするとJPanelが機能しないだけで何も描画されません。ここ は私のコードです:JComponentがJPanelに描画されない
public class SimpleComponent extends JComponent{
int x, y, width, height;
public SimpleComponent(int x, int y, int width, int height){
this.x = x;
this.y = y;
}
@Override
public void paintComponent(Graphics g){
Graphics2D g2 = (Graphics2D) g;
g2.setColor(Color.BLACK);
g2.fillRect(x, y, width, height);
}
}
public class TestFrame{
public static void main(String[] args){
JFrame frame = new JFrame();
JPanel panel = new JPanel();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
panel.setPreferredSize(new Dimension(400, 400));
frame.add(panel);
frame.pack();
frame.setResizable(false);
SimpleComponent comp = new SimpleComponent(10, 10, 100, 100);
panel.add(comp);
frame.setVisible(true);
}
}
これは本当に奇妙なことですが、この問題はWindowsとMacで複製され、常に同じです – lilroo
ああ、幅と高さがゼロに設定されています – lilroo
幅と高さのフィールドを設定した後、私がメソッドgetPreferredSize()をオーバーライドしたとき、それは機能しました。 – lilroo