JPanel
에서 값을 가져 오는 GUI를 만들려고합니다. 버튼을 누르면 이전 패널에서 입력 한 정보를 사용하는 다음 패널로 이동합니다. 한 패널은 사용자가 이전 패널에서 입력 한 값에 따라 달라 지므로 CardLayout
은 패널을 문자열로 참조하므로 여기서는 작동하지 않을 것이라고 생각합니다. 내가 구현하기 위해 노력하고있어 메커니즘의 예로서 입력에 따라 JPanel을 변경할 JFrame을 작성합니다. JPanel 자체는 상황에 따라 다르고 변수에 따라 달라집니다.
- 가 첫 번째 패널 입력에 번호를 사용자에게 묻습니다
JFrame
, - 두 번째 패널을 만드는 시도 그러면 사용자가 선택한 첫 번째 번호를 표시하고 두 번째 번호를 선택하도록 요청합니다.
- 세 번째 패널에는 사용자가 선택한 첫 번째 번호와 두 번째 번호가 모두 표시되어 세 번째 번호를 요청합니다.
- 마지막으로 네 번째 패널은 사용자가 각
JPanel
에 입력 한 세 개의 숫자의 합계를 표시하고 사용자가JFrame
을 다시 설정할 수 있도록합니다.
내가 처음부터 끝까지 이동할 수있는 4 개의 별도 클래스를 만들었습니다. JPanels
. 코드에서 알 수 있듯이 나는이 각각의 JPanel
을 별도의 JFrame
에 테스트하여 원하는 효과가 발생하는지 확인했습니다.
다음은 PanelThree
, PanelFour
및 전체 GUI 코드입니다.
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);
}
}
이제이 문제는, 시도 클래스가 네 JPanel
니트에게 :
패널 세 :
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);
}
}
패널 네 개의 패널 하나, 둘, 패널 3 매우 유사 마지막으로 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
"model-view-controller"패러다임을 연구해야합니다. 아이디어는보기 및 컨트롤러에서 공유 할 수있는 데이터를 나타내는 "모델"입니다.보기 및 컨트롤러의 이벤트를 기반으로 발생해야 할 작업을 결정합니다. – MadProgrammer