JPanel
の値をとるGUIを作成しようとしています。前のパネルから入力された情報を使用する次のパネルに移動します。 1つのパネルはユーザーが前のパネルから入力した値に依存するため、CardLayout
はパネルを文字列として参照するのでここでは機能しません。私が実装しようとしている機構の一例として、私は最初のパネルが多数、 JPanel自体がコンテキストに依存し、変数に依存する入力に基づいてJPanelを変更するJFrameを記述する
JFrame
を作成するためにを試みてきました
- 3番目のパネルには、ユーザーが選択した最初の番号と2番目の番号の両方が表示され、3番目の番号が尋ねられます。
- 最後に、4番目のパネルには、ユーザーが各
JPanel
に入力した3つの数字の合計が表示され、ユーザーはJFrame
をリセットできます。
最初に4つの別々のクラスを作成して、4つのクラスを作成して、移動できるようにしたいと思っています。JPanels
コードからわかるように、これらのそれぞれを別のJFrame
にテストして、目的の効果が得られるかどうかを確認しました。
PanelThree
、PanelFour
および全体のGUIのコードは次のとおりです。パネル1と2はパネル3と非常によく似ています
パネル3:
import javax.swing.*;
import java.awt.*;
public class PanelThree extends JPanel {
JPanel row1 = new JPanel();
JPanel row2 = new JPanel();
JPanel row3 = new JPanel();
JSlider slider = new JSlider(0, 10, 5);
JButton next = new JButton("Find the total of all three numbers");
public PanelThree(int num0, int num1) {
BorderLayout lay = new BorderLayout();
setLayout(lay);
JLabel one = new JLabel("Choose your last number on the slider, the
slider goes from one to ten. Your first number was: " + num0 + ". Your
second number was: " + num1);
row1.add(one);
row2.add(slider);
row3.add(next);
add(row1, BorderLayout.NORTH);
add(row2, BorderLayout.CENTER);
add(row3, BorderLayout.SOUTH);
}
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(800,600);
PanelThree panelThree = new PanelThree(7, 2);
frame.setContentPane(panelThree);
frame.setVisible(true);
}
}
パネル4:
import javax.swing.*;
import java.awt.*;
public class PanelFour extends JPanel {
JPanel row1 = new JPanel();
JPanel row2 = new JPanel();
JButton reset = new JButton("Reset");
public PanelFour(int num0, int num1, int num2) {
BorderLayout lay = new BorderLayout();
setLayout(lay);
int tot = num0 + num1 + num2;
JLabel total = new JLabel("All of your numbers add up to: " + tot);
row1.add(total);
row2.add(reset);
add(row1, BorderLayout.CENTER);
add(row2, BorderLayout.SOUTH);
}
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(800,600);
PanelFour panelFour = new PanelFour(7, 2, 9);
frame.setContentPane(panelFour);
frame.setVisible(true);
}
}
さて、これは、4 JPanel
を編むしようとするクラスの問題です最後にJPanel
に入力されたものに基づいて反応するようにしてください。JFrame
。この問題は、Frameコンストラクタ内のコンポーネントにアクセスできないactionPerformed
メソッドを使用しているようです。ここでは、コードは次のようになります。
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Frame extends JFrame implements ActionListener {
int x, y, z;
public void Frame() {
super("Number Adder");
int i = 1;
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
PanelOne panelOne = new PanelOne();
panelOne.next.addActionListener(this);
PanelTwo panelTwo = new PanelTwo(x);
panelTwo.next.addActionListener(this);
PanelThree panelThree = new PanelThree(x, y);
panelThree.next.addActionListener(this);
PanelFour panelFour = new PanelFour(x, y, z);
panelFour.reset.addActionListener(this);
if (i == 1) {
add(panelOne);
} else if (i == 2) {
add(panelTwo);
} else if (i == 3) {
add(panelThree);
} else {
add(panelFour);
}
}
public actionPerformed(ActionEvent e) {
if (e.getSource() == panelOne.next) {
return x = int panelOne.slider.getValue();
return i = 2;
} else if (e.getSource() == panelTwo.next) {
return y = int panelTwo.slider.getValue();
return i = 3;
} else if (e.getSource() == panelThree.next) {
return z = int panelThree.slider.getValue();
return i = 4;
} else {
return i = 1;
}
repaint();
}
public static void main(String[] args) {
Frame frame = new Frame();
}
}
が、私はこれをこれを修正または改善するために何ができますか?
ようこそスタックオーバーフロー!あなたはあなたの質問に多くのコードを書いているので、私たち(そして将来の読者)にはどこに問題があるのかがはっきりしません。問題のコードを10行以下に減らしてください。参照:[最小限で完全で検証可能な例の作成方法](http://stackoverflow.com/help/mcve)と[小規模プログラムのデバッグ方法](https://ericlippert.com/2014/03/05)/how-to-debug-small-programs /)を実行します。 –
@JoeC 10行では設計上問題はありません。動作上の問題ではないので、デバッグは役に立ちません。 – user1803551
「モデルビューコントローラ」のパラダイムについていくつかの研究を行う必要があります。ビューとモデルのイベントに基づいて何が起こるべきかを決定するビューとコントローラによって共有できるデータを表す「モデル」があります。 – MadProgrammer