在改代码基础上将监听器单独写出且文本排布为垂直
时间: 2024-12-11 11:24:52 浏览: 17
如果你想将监听器提取出来并且文本框以垂直方向排列,你可以将按钮事件处理程序封装到一个新的方法中,然后调整窗口布局来实现垂直布局。这里有一个更新后的例子:
```java
import javax.swing.*;
import java.awt.*;
public class MyFrame extends JFrame {
private JTextField inputField;
private JTextField resultField;
private JButton copyButton;
private JButton closeButton;
private ActionListener buttonListener = e -> {
if (e.getSource() == copyButton) {
resultField.setText(inputField.getText());
} else if (e.getSource() == closeButton) {
dispose(); // 关闭窗口
}
};
public MyFrame() {
// 设置窗口信息
setTitle("myframe");
setSize(400, 300);
setLocationRelativeTo(null); // 将窗口居中显示
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 创建FlowLayout布局管理器,改为垂直布局
Box verticalBox = Box.createVerticalBox();
setLayout(new BorderLayout());
// 添加垂直布局区域
verticalBox.add(createHorizontalSection("输入:", inputField));
verticalBox.add(createHorizontalSection("结果:", resultField));
JPanel buttonsPanel = new JPanel();
buttonsPanel.setLayout(new FlowLayout(FlowLayout.CENTER)); // 水平对齐按钮
buttonsPanel.add(copyButton);
buttonsPanel.add(closeButton);
add(buttonsPanel, BorderLayout.NORTH);
add(verticalBox, BorderLayout.CENTER);
}
private JPanel createHorizontalSection(String label, JTextField textField) {
JPanel section = new JPanel();
section.setLayout(new BoxLayout(section, BoxLayout.LINE_AXIS));
section.setBorder(BorderFactory.createEmptyBorder(5, 0, 5, 0));
section.add(new JLabel(label));
section.add(textField);
return section;
}
public static void main(String[] args) {
EventQueue.invokeLater(() -> {
try {
MyFrame frame = new MyFrame();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
});
}
}
```
在这个版本中,我创建了一个名为`buttonListener`的匿名内部类,用于处理按钮点击事件。`createHorizontalSection`方法负责生成包含标签和文本框的垂直面板。最后,我们将按钮放置在一个独立的面板`buttonsPanel`中,该面板位于窗口顶部。
阅读全文