2016-05-16 6 views
0

こんにちは(私の貧しい私の英語には申し訳ありません)、なぜ私のJPanelに絡みがないのですか?

私は学校に運動をしています。私は、私のJPanel上に描き直すことはできません...誰かが自分のコードで問題を参照してください?私はそれを私の右のパネルに描いて欲しい。東は西に、西は東にある。助けてくれてありがとう :)!

import java.awt.*; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.*; 


public class P1027 extends JFrame { 

private JButton button; 
private JTextField field; 
private JPanel east; 
private JPanel west; 
//static Graphics g; 

public P1027() { 

    init(); 

} 

public void init() { 

    final int FRAME_WIDHT = 800; 
    final int FRMAE_HEIGHT = 1000; 
    int input = 3; 

    final JFrame frame = new JFrame(); 
    frame.setSize(FRAME_WIDHT, FRAME_WIDHT); 
    frame.setTitle("Frame"); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    west = new JPanel(); 
    west.setSize(600, 900); 
    west.setBorder(BorderFactory.createLineBorder(Color.black)); 

    east = new JPanel(); 
    button = new JButton("Add squares"); 

    button.addActionListener(new java.awt.event.ActionListener() { 

     public void actionPerformed(java.awt.event.ActionEvent evt) { 
      jt1ActionPerformed(evt); 
     } 

     public void jt1ActionPerformed(ActionEvent evt) { 

      //int aantalRect = Integer.parseInt(field.getText()); 
      MyDrawing draw = new MyDrawing(); 
      east.add(draw); 
      System.out.println("hoi"); 

     } 
    }); 

    field = new JTextField(5); 
    east.add(button); 
    east.add(field); 
    east.setSize(300, 1000); 
    button.setSize(100, 50); 

    east.setBorder(BorderFactory.createLineBorder(Color.black)); 

    frame.add(east); 
    frame.add(west); 

    frame.setResizable(true); 
    frame.setVisible(true); 

} 

public static void main(String[] a) { 

    P1027 form = new P1027(); 

} 

} 

class MyDrawing extends JComponent { 

public void paintComponent(Graphics g) { 
    super.paintComponent(g); 

    g.setColor(Color.BLUE); 
    g.fillRect(25, 25, 100, 100); 

    g.drawRect(50, 100, 50, 50); 
    g.drawRect(300, 150, 100, 50); 

} 

} 

答えて

1

問題:

  • 容器(東のJPanel)に成分(MyDrawingのJComponent)を添加した後、追加したコンポーネントをレイアウトすると、再描画するコンテナのrevalidate()repaint()を呼び出す必要があります汚れたピクセルを取り除きます。
  • MyDrawing JComponentのpreferredSizeは[0、0]です。そのため、FlowLayoutを使用するコンテナに追加すると、[0、0]のままになります。 getPreferredSize()メソッド(Kleopatraあたりの優先)をオーバーライドするか、またはpreferredSizeを設定します。
+0

オケ、それは私のためにコード化できますか?どこに? – Tony

+1

@トニー:いいえ、自分でそれを試してください。これは "私のコードは私のためのサービス"ではなく、質問回答サービスです。 –

+0

私はそれを得ました。ありがとう。今私は長方形が特定のJPanelを描画することを宣言したい。 – Tony

関連する問題