0

Class2 と Class4 の 2 つのクラスがあります。p4.add(c2o) および f.add(p4) メソッドを使用して、Class4 から Class2 のペイントを Class4 の JPanel に追加したいと考えています。GUI の追加には問題はありませんが、グラフィックを追加できませんでした。

クラス4:

import java.awt.BorderLayout;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;

public class Class4 {


    public void mainMethod(int event){
        JFrame f = new JFrame("Love Test");
        if(event == 0){

            f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            f.setSize(500,200);
            f.setLayout(null);

            JPanel p = new JPanel(new BorderLayout());
            p.setBounds(150, 0, 350, 75);
            Class3 c3o = new Class3();
            p.add(c3o);
            f.add(p);

            JPanel p2 = new JPanel();
            Class7 c7o = new Class7();
            p2.add(c7o);
            p2.setBounds(0, 75, 500, 40);
            f.add(p2);

            JPanel p3 = new JPanel();
            p3.setBounds(0, 0, 150, 75);
            Class5 c5o = new Class5();
            p3.add(c5o);
            f.add(p3);

            f.setVisible(true);

        }

        if(event == 5){

            JPanel p4 = new JPanel();
            Class2 c2o = new Class2();
            p4.add(c2o);
            p4.setBounds(0,115,500,55);
            f.add(p4);
        }

    }


}

クラス 2:

import javax.swing.JOptionPane;
import javax.swing.JPanel;

import java.util.Random;
import java.awt.*;



public class Class2 extends JPanel{

    public void paint(Graphics g){
        super.paint(g);
        this.setBackground(Color.WHITE);
        g.setColor(new Color(0,0,0));
        String str = "";
        String str2 = "";
        Random rlove = new Random();
        int love = rlove.nextInt(101);
        Class3 c3o = new Class3();
        str = c3o.boy.getText() + " and " + c3o.girl.getText() + "'s amount of love is " + love + "%.";
        if(love >= 0 && love < 10){         
            str2 = "Stop thinking about that person anymore!";
        }
        if(love >= 10 && love < 20){
            str2 = "1/100 percent chance...";
        }
        if(love >= 20 && love < 30){
            str2 = "Little hope...";
        }
        if(love >= 30 && love < 40){
            str2 = "Not even a kiss, stop talking about French kisses! (wise words of Rubesh)";
        }
        if(love >= 40 && love < 50){
            str2 = "Near passing";
        }
        if(love >= 50 && love < 60){
            str2 = "Just Pass";
        }
        if(love >= 60 && love < 70){
            str2 = "Some effort needed.";
        }
        if(love >= 70 && love < 80){
            str2 = "Grade A. A good chance.";
        }
        if(love >= 80 && love < 90){
            str2 = "Good pair. Very good relationship!";
        }
        if(love >= 90 && love < 100){
            str2 = "Perfect pair. Lost for words.";
        }
        if(love == 100){
            str2 = "OH MY GOD!!!!!";
        }
        g.drawString(str,10,10);
        g.drawString(str2,10,30);
    }


}

paintComponent を JPanel p4 に追加するにはどうすればよいですか? ありがとう!

4

2 に答える 2

1
  1. を使用しないでください。使用するJPanel#paintことをお勧めします。カスタム ペインティングの実行JPanel#paintComponentを確認してください。
  2. 適切なレイアウト マネージャーを使用します。あなたが抱えている問題は2つの問題から来ています。1 つ目は、パネルに優先サイズがないことです。getPreferredSizeのメソッドをオーバーライドしClass2、レイアウト マネージャーの適切なサイズを返します。

...

JPanel p4 = new JPanel(); // Default layout manager is FlowLayout
Class2 c2o = new Class2();
// c2o has not size (0x0 by default)...
p4.add(c2o);
p4.setBounds(0,115,500,55);
f.add(p4);
于 2013-05-11T11:08:03.997 に答える
0

これに対する簡単な答えはありませんが、説明しようと思います。

ボタンやラベルを配置するのと同じように、キャンバスをセットアップする必要があります。次に、これに MouseListener を追加する必要があります。MouseListener インターフェイスは、項目を描画するマウスを追跡するために使用されます。コードの量が多いため、色の選択と形状の選択を含む完全な例をセットアップしました。これを共有するためにpastebinを使用しています。

この後、重要な要素について説明しました。見てみましょう: http://pastebin.com/YRr0LGPX

ここでの重要なコンポーネントは次のとおりです。

内側のヘルパー クラス「Board」はキャンバスです。これは、MouseListener と MouseMotionListener を実装します。これは、マウスの動きと押されたキーを追跡するために行われます。

private class Board extends JPanel implements 
    MouseListener, MouseMotionListener {

paintComponent(Graphics g) はペイントを処理するメソッドであり、Im は Graphics2D ライブラリを使用して形状を作成します。

mousePressed(MouseEvent e) は、シェイプを描画する開始座標を受け取ります。

public void mousePressed(MouseEvent e) {
    startPoint = e.getPoint();
}

キークリックが終了すると mouseReleased(MouseEvent e) が呼び出され、このメソッドは形状の描画を処理します。スイッチケースを使用してさまざまな形状を処理し、座標をチェックして形状の描画を処理しました。Shapes の詳細については、http: //docs.oracle.com/javase/7/docs/api/java/awt/Shape.html を参照してください。

マウスが離されると、次のコードが実行されます。

shapes.add(s); //Adds the new shape to the Vector of shapes
startPoint = null; //Resets the starting ...
endPoint = null; //and ending coordinates to the system
colorList.add(color); 
repaint(); //Repaints the entire canvas with the shapes in the Vector<Shape>

マウスのキーを離したときだけ図形を描画したいわけではなく、マウスをドラッグしたときに図形を再描画したいのですが、これは mouseDragged(MouseEvent e) メソッドで行われます

免責事項:

これは私が昔に行ったテスト プロジェクトでした。今これをセットアップする場合は、もう少し DRY にしますが、これが問題の解決に役立つことを願っています。

ペンシルのような機能で「フリーハンド」を描く必要がある場合、ロジックに基づいて構築できない限り、これは実際にはカバーしません。「グラフィックス」は少し曇っていました.. :)

しかし、ドットを作成する方法について、 swing/awt で「ドット/ピクセル」を作成するPrine Java によって提示されたいくつかのヘルプがあります。逆のオプションを追加できるように、2D配列を作成することをお勧めします:)

于 2013-05-11T10:42:49.367 に答える