PracticeJava20181201Listener


package MyFrame;

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

class MyFrame extends JFrame{
// 此視窗所用到的元件
int fieldWidth = 10;
JPanel panel, inPanel, outPanel;
JLabel inputFieldLabel, outputFieldLabel;
JTextField inputField, outputField;
JButton inputButton;

public MyFrame() {
super("視窗事件範例");//為什麼子類別可以繼承這個範例?這範例從哪來的?
initApp();
}

// 元件相關設置
public void initApp() {
panel = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
//BoxLayout是讓物件保持水平或垂直平行對齊的語法
inPanel = new JPanel();
outPanel = new JPanel();

inputFieldLabel = new JLabel("輸入文字");
inputField = new JTextField(fieldWidth);
inputField.addActionListener(new inputFieldActionListener()); // 要將事件處理加入

inputButton = new JButton("確定");
inputButton.addActionListener(new inputButtonActionListener()); // 要將事件處理加入

outputFieldLabel = new JLabel("輸出文字");
outputField = new JTextField(fieldWidth);

panel.add(inputFieldLabel);
panel.add(inputField);
panel.add(outputFieldLabel);
panel.add(outputField);

inPanel.add(inputFieldLabel);
inPanel.add(inputField);
inPanel.add(inputButton);
outPanel.add(outputFieldLabel);
outPanel.add(outputField);

panel.add(inPanel);
panel.add(outPanel);

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(300, 300);
this.getContentPane().add(panel);
this.setVisible(true);
}

// inputField的事件處理
private class inputFieldActionListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
changeOutputText();
}
}

// inputButton的事件處理
private class inputButtonActionListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
changeOutputText();
}
}

public void changeOutputText() {
String input_field_str = inputField.getText();
outputField.setText(input_field_str);
}

public static void main(String[] args) {
MyFrame app = new MyFrame();
}
}