JFrameに矩形が表示されないようです。このプロジェクトのパラメータによって、このクラスにIconインターフェイスを実装させる必要があります。コードをそのまま実行すると、JFrameが取得されますが、内部には何も表示されません。それは黒い四角を表示する必要があります。私は問題がグラフィックインスタンス変数をどのように初期化しているかと関係があると仮定しています。私はGUIグラフィックスでの作業経験はあまりないので、これを正しく行う方法は完全にはわかりません。JFrameに何も表示されない
はい、私は定数を使用しているので、getIconWidthメソッドとgetIconHeightメソッドが冗長であることを知っていますが、インターフェイスを実装するにはこれらのメソッドが必要です。
public class MugDisplay extends JFrame implements Icon {
private int width;
private int height;
private JPanel panel;
private Graphics graphics;
private static final int ICON_WIDTH = 100;
private static final int ICON_HEIGHT = 100;
public MugDisplay() {
this.configureGui();
this.panel = new JPanel();
this.panel.setLayout(new BorderLayout());
this.add(this.panel, BorderLayout.CENTER);
this.graphics = this.getGraphics();
int xPos = (this.panel.getWidth() - this.getIconWidth())/2;
int yPos = (this.panel.getHeight() - this.getIconHeight())/2;
this.paintIcon(this.panel, this.graphics, xPos, yPos);
}
@Override
public void paintIcon(Component c, Graphics g, int x, int y) {
Graphics2D g2 = (Graphics2D) g;
g2.setColor(Color.BLACK);
g2.fillRect(x, y, ICON_WIDTH, ICON_HEIGHT);
}
@Override
public int getIconWidth() {
return ICON_WIDTH;
}
@Override
public int getIconHeight() {
return ICON_HEIGHT;
}
private void configureGui() {
this.setPreferredSize(new Dimension(600, 600));
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.getContentPane().setLayout(new BorderLayout());
this.pack();
this.setVisible(true);
}
}
このクラスを呼び出すドライバクラスは、MCVEを持つためにここにあります。
public class Main {
public static void main(String[] args) {
MugDisplay md = new MugDisplay();
md.setVisible(true);
}
}
'this.getGraphics();'を使用してグラフィックスを取得せず、コンストラクタで 'paintIcon'を呼び出しません。フレームの 'paint'メソッドをオーバーライドし、' super.paint(g) 'を呼び出し、xとyを計算し、そこに' paintIcon'を呼び出します(paintメソッドのグラフィックインスタンスを解析します)。この場合、フレームの 'paint'をオーバーライドする利点が本当にわからないので、代わりに' JPanel'に切り替えて 'paintComponent'をオーバーライドすることも考えてください。 –