2

私は JApplet を設計しています。基本的に、このアプレットを使用すると、ユーザーは二次方程式グラフを描画でき、x 軸と y 軸の両方の範囲を挿入できます。しかし、そこに到達するためには、まだやるべきことがたくさんあります。

私はまだインターフェースを設計している段階です。

これが私のコードです:

import java.awt.Dimension;

import javax.swing.BoxLayout;
import javax.swing.JApplet;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;


public class Applet extends JApplet {
    JPanel p1;
    JPanel p2;
    JPanel p3;

    JScrollPane s1;

    public Applet() {

    p1 = new JPanel();
    p2 = new JPanel();
    p3 = new JPanel();

    s1 = new JScrollPane(p3,s1.VERTICAL_SCROLLBAR_ALWAYS,s1.HORIZONTAL_SCROLLBAR_ALWAYS);
    }

    @Override
    public void init() {
    super.init();

    for(int i=0;i<100;i++)
    {
        p3.add(new JButton("Hello"));
        p3.add(new JLabel("blah"));
        p3.add(new JButton("Sup"));
    }

    p1.setPreferredSize(new Dimension(this.getWidth(), this.getHeight()));
    p2.setPreferredSize(new Dimension(this.getWidth(),(int) (this.getHeight()*0.6667)));

    p3.setLayout(new BoxLayout(p3,BoxLayout.PAGE_AXIS));
    s1.setPreferredSize(new Dimension(this.getWidth(),(int)(this.getHeight()*0.33333)));

    p1.add(p2);
    p1.add(s1);

    this.add(p1);
    }

}
4

2 に答える 2

4
  1. x 軸と y 軸のコントロールを上下に配置するには、2 つのパネルが必要です。1 つは x 軸のラベルとテキスト フィールドを含み、もう 1 つは y 軸のラベルとテキスト フィールドを含みます。次に、それらを垂直に配置されたパネルに追加します。(Box.createVerticalBox()例)

  2. 'Plot' と 'Refine' ボタンのいずれgraph.javaかを作成できます。ActionListenergraph.javaのactionPerformedメソッドでは、「ControlsB」インスタンスから範囲を収集して、再描画を開始できます。

編集:あなたのコメントに返信しています...

「x 軸を y 軸の上に配置するために別のパネルを追加する方法」

これは (ControlsB.java で) 次のように単純にすることができます。

b = Box.createHorizontalBox();
b.add(new JLabel("Please enter range:  "));

Box b0 = Box.createVerticalBox();//create a vertical box to stack the controls

Box b1 = Box.createHorizontalBox(); // create a horizontal box for the x-axis

b1.add(new JLabel(" x-axis "));
b1.add(new JLabel("from"));
JTextField f1 = new JTextField("-5");
f1.setMaximumSize(new Dimension(100,30));
b1.add(f1);
b1.add(new JLabel(" to "));
JTextField f2 = new JTextField("5");
f2.setMaximumSize(new Dimension(100,30));
b1.add(f2);
b1.add(new JLabel(".   "));

Box b2 = Box.createHorizontalBox(); // create a second horizontal box for the y-axis
b2.add(new JLabel("y-axis "));
b2.add(new JLabel("from"));
JTextField f3 = new JTextField("5");
f3.setMaximumSize(new Dimension(100,30));
b2.add(f3);
b2.add(new JLabel("to"));
JTextField f4 = new JTextField("-5");
f4.setMaximumSize(new Dimension(100,30));
b2.add(f4);

b0.add(b1); // add the x-axis to the vertical box
b0.add(b2); // add the y-axis to the vertical box
b.add(b0);  // add the vertical box to the parent

b.add(new JButton("Plot"));
b.add(new JButton("Refine"));
add(b); //is this necessary?
}

' そして、ControlsB インスタンスから範囲を収集する方法...'

このチュートリアルActionListenerのを調べて、ボタン クリック イベントを別のクラスでトリガーするアクションを作成する方法を理解する必要があります。

また、2つの批評:

  1. メイン クラス では、との各コンストラクタに渡す前に をGraphApplet作成しています。次に、コンストラクターで、渡した Box を再割り当てします。それを行う必要はないと思います。で正しく配置されたボックスを作成するか、それを渡して再割り当てしないか、何も渡さないでください。BoxControlsAControlsBGraphApplet

  2. あなたControlsAControlsBクラスの両方が拡張しJPanelます。これらのコンストラクターの最後にコンテナを追加する手間はかかりますBoxが、これらの Controls+ オブジェクトを親コンテナに追加することはありません。現在の実装では、拡張JPanelは必要ないことをお勧めします。

于 2012-06-16T14:58:21.803 に答える
4

推奨事項:

  • あるコンポーネントを別のコンポーネントの上に配置する場合は、垂直 BoxLayout など、これを容易にするレイアウト マネージャーを使用します。
  • 数値データの変化にディスプレイを応答させるには、 Model-View-Controllerタイプのアプリケーション デザインを使用して、これを簡単に実装できるようにプログラムを設計することをお勧めします。「プロット」または「調整」ボタンを押すと、コントローラーがトリガーされ、モデルのデータが更新されます。ビューまたは GUI はモデルの変更をリッスンし、変更が発生すると、モデルの最新データに基づいてグラフを再プロットします。
于 2012-06-16T15:07:24.620 に答える