저는 Java에 익숙하지 않기 때문에 어떤 문제가 있는지 잘 모릅니다. 여기에있는 코드는 실행될 때 한 번 창을 열어야하는 코드입니다. 그러나 ColoredWordsExperiment
클래스를 ButtonHandler
클래스로 확장 할 때마다 창은 무한히 빠르게 열리고 거의 언제든지 컴퓨터가 충돌합니다. 확장 기능을 생략하면 잘 동작하지만, ButtonHandler
클래스의 ColoredWordsExperiment
클래스의 객체를 사용할 수 없게됩니다. 코드 아래에서 코드를 찾을 수 있습니다 (그렇지 않은 경우, d가 너무 길어진다).클래스를 확장 할 때 오류가 발생했습니다.
public class ColoredWordsExperiment {
JFrame frame;
ButtonHandler buttonHandler;
ColoredWordsExperiment(){
frame = new JFrame("Colored Words Experiment");
frame.setSize(1200, 150);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
button1 = new JButton("Matching");
label1 = new JLabel("test");
label1.setPreferredSize(new Dimension(90, 40));
JPanel labelContainer = new JPanel();
labelContainer.add(label1);
JPanel buttonContainer = new JPanel();
buttonContainer.add(button1);
frame.add(buttonContainer, BorderLayout.SOUTH);
frame.add(labelContainer, BorderLayout.NORTH);
buttonHandler = new ButtonHandler();
button1.addActionListener(buttonHandler);
}
public static void main(String[] arg) {
new ColoredWordsExperiment();
}
}
-, 당신이 그 ButtonHandlers 중 하나 만드는 부모 클래스의 생성자에서
public class ButtonHandler extends ColoredWordsExperiment implements ActionListener {
@Override
public void actionPerformed(ActionEvent e){
if (e.getActionCommand().equals("Matching")) {
System.out.println("Matching");
label1.setText("Text changed");
}
}
}
코드가 그와 같은 역할을하는 이유를 설명해야합니다. – Alvaro
하지만 "일치하는"버튼을 클릭 할 때마다 label1 텍스트를 변경하고 싶습니다. ButtonHandler에서 ColoredWordsExperiment를 확장하지 않으면 어떻게됩니까? Label1.setText ("Text changed") 이후입니다. ColoredWordsExperiment를 확장하지 않으면 작동하지 않습니다. – Ken
익명의 내부 클래스에 대한 설명과 함께 자세한 내용을 추가로 편집했습니다. 두 솔루션 모두이를 처리해야합니다. – Justin