私は、Java GUIプログラミングには初めてです。 私はJFrame
を作成しました。 このJFrame
の中には、JPanel
が作成されています。 このJPanel
の中に別のJPanel
(「A」と呼ぶこともできます)を作成しました。JFrameのJPanelで子JPanelを見ることができません
"A"で四角形を描き、グラフィックスを使用してボタンを作成したかったのです。 私のguiに矩形はありません。 "A"内のpaintComponent()
メソッドが呼び出されていないことがわかりました。
コード: のJPanel: おかげで、すべて、 は、私はそれで同じクラス名を持つ問題に発生する別のパッケージを持っていた:
public class MemoryPanel extends JPanel {
public MemoryPanel(){
setPreferredSize(new Dimension(350,448));
}
@Override
public void paintComponent(Graphics g) {
//POSITIONING
setLayout(new BorderLayout());
//CREATE MEMORY BUTTONS
MemButton a=new MemButton();
//Drawing Rectangles for Memory
add(a,BorderLayout.CENTER);
}
private class MemoryButton extends JPanel{
public MemoryButton(){
setLayout(null);
setPreferredSize(new Dimension(87,40));
}
@Override
public void paintComponent(Graphics g){
Graphics2D td= (Graphics2D)g;
td.drawRect(0, 0, 20, 20);
}
}
}
EDIT(子JPanel
は内部クラスです)。今はうまくいくようです。
1) 'paintComponent'メソッドを使用してグラフィックスを描画し、コンポーネントを作成したり追加したりしないでください。それをコンストラクタで行います。 2) 'BorderLayout.CENTER'にボタンを追加している場合、' setPreferredSize'は期待したことをしません。ボタンは利用可能なスペース全体を占有します。 3) 'paintComponent'メソッドの始めに' super.paintComponent() 'を呼び出すことを忘れないでください。また、 'MemButton'は' MemoryButton'と同じですか? - 問題を再現する[mcve]を投稿することを検討してください。 –