1

MyFrameを拡張するクラスがありますJFrame。NET Beans のデザイン オプションを使用して、このフレームにコンポーネント (コントロール、つまりボタン) を追加しました。オーバーライドされたメソッドMyCanvasで拡張するクラスがあります。このコンポーネントをクラスに追加しようとしています。しかし、それを追加して表示すると、canvas( ) 自体が に表示されません。(最初に、によって拡張されたクラスを追加しようとしていました。しかし、ここでスレッドを読んで、それを に変更しようとしました。どちらも機能しませんでした。キャンバスの場合、明らかに paint not を使用します)私のコードは以下にありますJPanelpaintComponent()MyFrameJPanelJFrameMycanvasCanvasJPanelpaintcomponent()

MyCanvas クラス

 public class MyCanvas extends javax.swing.JPanel{

 MyCanvas()
 {
      super();
 }

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

    Graphics2D graphics2D=(Graphics2D)g;

    graphics2D.drawRect(10, 10, 10, 10);

    graphics2D.drawOval(0, 0, 100, 100);
}

}

マイフレーム

public class Myframe extends javax.swing.JFrame {

public Myframe() {

    initComponents();
  @SuppressWarnings("unchecked")
  +generatedcode by the designer

 private void RectangleActionPerformed(java.awt.event.ActionEvent evt) {
}

private void SquareActionPerformed(java.awt.event.ActionEvent evt) {
}

private void CircleActionPerformed(java.awt.event.ActionEvent evt) {
}

/**
 * @param args the command line arguments
 */
public static void main(String args[]) {
    /* Set the Nimbus look and feel */
 java.awt.EventQueue.invokeLater(new Runnable() {
        public void run() {
            new Myframe().setVisible(true);
        }
    });
}
public void run() {
        new Myframe().setVisible(true);
    }
// Variables declaration - do not modify
private javax.swing.JButton Circle;
private javax.swing.JButton Rectangle;
private javax.swing.JButton Square;
// End of variables declaration
}

私の主なプログラム

public static void main(String[] args) {

    MyCanvas c = new MyCanvas();
    Myframe f= new Myframe();//Works if used JFrame instead of MyFrame

    f.add(c);
    f.setVisible(true);
}

基本的に、イベントをトリガーしてキャンバスに描画されるものを変更できるボタンが必要な GUI を作成したいと考えています。空のjframeで試してみました。キャンバス/パネルを JFrame に追加しました。出来た。また、パネル/キャンバスを変更し、フレームをリフレッシュしました。それもうまくいきました。しかし、私はこのようにすることはできません。

4

3 に答える 3

2

JFrameIDE で作成することと自分で作成することを混在させているということです。IDE はすべてのコンポーネントを、理想的には追加したい場所にJPanel追加することを覚えておいてください。JFrameinitComponents()Canvas

JFrameandを自分で作成するかJPanel(Netbeans GUI ビルダーを使用せずに)

また

Netbeans のPalette Managerを使用してパレットに追加するComponentと、他のクラスと同様に GUI ビルダーで使用できます。

Canvas(クラスをプロジェクト ツリーからJFrameGUI デザイナーにドラッグするだけです)

カスタムCanvas関数を確認するには:

  • 適合するサイズをオーバーライドgetPrefferedSize(..)して返す

参照:

于 2012-10-26T18:23:02.680 に答える
0

次のように変更してみてください。

public static void main(String[] args) {

    MyCanvas c = new MyCanvas();
    Myframe f= new Myframe();//Works if used JFrame instead of MyFrame

    f.add(c);
    c.setVisible(true);
    f.setVisible(true);
}

また、MyFrameクラスのコード:

/**
 * @param args the command line arguments
 */
public static void main(String args[]) {
    /* Set the Nimbus look and feel */
 java.awt.EventQueue.invokeLater(new Runnable() {
        public void run() {
            new Myframe().setVisible(true);
        }
    });
}

MyFrameプログラム main の代わりに実行していない限り、実行されません。

また、コンストラクターにsuper()呼び出しがあることを確認してください。MyFrame

于 2012-10-26T18:05:08.480 に答える
0
@Override
public void paintComponent(Graphics g) {
    super.paintComponent(g);

    g.setColor(Color.BLACK);

    Graphics2D graphics2D=(Graphics2D)g;

    graphics2D.drawRect(10, 10, 10, 10);

    graphics2D.drawOval(0, 0, 100, 100);
}
于 2012-10-26T18:11:46.980 に答える