리니어 콘솔 프로그램을 작성한 것처럼 이것을 코딩하고 있기 때문에 프로그램이 어떻게 돌아가는지 다시 생각해 봐야하지만, 그렇지는 않습니다. 대신 이벤트 기반의 GUI 프로그램 인을 코딩하므로 "대기"코드 대신 이벤트에 반응하고 상태를 변경해야합니다.
더 자세한 정보가 필요하면 프로그램에서 수행해야 할 작업, ArrayList의 의미, 링크가 아닌 링크에 유효한 내용 minimal example program (링크를 읽어주십시오).
나는 논리적 인 필요에 따라 놀려고 했었고, 많은 JTextField를 만드는 작은 프로그램을 만들었습니다. 클릭하면 보유한 텍스트가 JTextArea에 추가되고 필드가 선택된 필드 ArrayList에 추가됩니다. 목록에 추가 된 필드 수가 4이면 논리가 실행됩니다. 이것은 모든 텍스트 필드에 추가 된 FocusListener에서 호출됩니다. 예를 들면 다음과 같습니다.
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.*;
import java.util.ArrayList;
import java.util.List;
import javax.swing.*;
@SuppressWarnings("serial")
public class EventDrivenGui extends JPanel {
private static final int FIELD_SIZE = 10;
private static final int SELECTED_FIELD_SIZE = 4;
protected static final Color SELECTED_COLOR = Color.PINK;
private JButton btnStraight;
private JTextArea textArea = new JTextArea(20, 40);
private List<JTextField> selectedFieldList = new ArrayList<>();
private List<JTextField> fieldList = new ArrayList<>();
public EventDrivenGui() {
btnStraight = new JButton("Straight");
btnStraight.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (selectedFieldList.size() > 0) {
return;
}
for (JTextField textField : fieldList) {
textField.setEnabled(true);
}
JOptionPane.showMessageDialog(btnStraight, "Please Select a text field",
"Make Selection", JOptionPane.INFORMATION_MESSAGE);
}
});
textArea.setFocusable(false);
JPanel fieldPanel = new JPanel(new GridLayout(0, 1, 5, 5));
for (int i = 0; i < FIELD_SIZE; i++) {
JTextField field = new JTextField("Field " + (i + 1), 10);
field.setEnabled(false); // so they can't select it prematurely
fieldList.add(field);
fieldPanel.add(field);
field.addFocusListener(new FocusAdapter() {
@Override
public void focusGained(FocusEvent e) {
JTextField tf = (JTextField) e.getComponent();
if (!selectedFieldList.contains(tf)) {
textArea.append(tf.getText() + "\n");
tf.setBackground(SELECTED_COLOR);
selectedFieldList.add(tf);
if (selectedFieldList.size() >= SELECTED_FIELD_SIZE) {
if (RouletteHelperMethods.doBet("Straight") == 1) {
textArea.append("Congrats, you won!\n");
} else {
textArea.append("Sorry, you lost.\n");
}
reset();
}
}
}
});
}
add(btnStraight);
add(new JScrollPane(textArea));
add(fieldPanel);
}
protected void reset() {
selectedFieldList.clear();
for (JTextField jTextField : fieldList) {
jTextField.setEnabled(false);
jTextField.setBackground(null);
}
}
private static void createAndShowGui() {
EventDrivenGui mainPanel = new EventDrivenGui();
JFrame frame = new JFrame("EventDrivenGui");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.getContentPane().add(mainPanel);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> createAndShowGui());
}
}
class RouletteHelperMethods {
public static int doBet(String bet) {
return Math.random() > 0.5 ? 1 : 0;
}
}
자세한 정보는 'ArrayList'에 추가하는 것이 무엇입니까? 우리가 어둠 속에서 길을 걷고있는 것처럼 느껴진다. 너는 우리에게서 너무 많은 정보를 빼앗고있다. –
나는 나의 질문을 편집했다. JTextFields를 ArrayList에 추가했다. 사용자가 버튼을 클릭하면, JTextFields를 클릭하여 내기를 원하는 것에 추가하라는 지시를 받아야한다. JTextFields의 ArrayList가 특정 크기 (이 경우 1)에 도달하면 if 문을 실행하려고합니다. –
좀 더 편집하십시오. 우리가 보여주지 않은 모든 코드를 볼 수없는 것처럼 물어보십시오. 또한 완전히 설명되지 않은 개념을 이해하지 못합니다. –