周四 GUI

标签由Jlable创建 通过实现ActionListener接口来创建动作监听器 传入表示事件的ActionEvent对象

我在写leftright时遇到了问题,我的想法是点击left就显示left,点击right就显示right,但是代码运行后并没有显示按钮,这是代码

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.plaf.basic.BasicOptionPaneUI;

public class LeftRightPanel extends JPanel {
    private JButton left,right;
    private JLabel label;
    private JLabel buttonpanel;
    public LeftRightPanel(){
        left=new JButton("Left");
        right=new JButton("Right");
        ButtonListener listener=new ButtonListener();
        left.addActionListener(listener);
        right.addActionListener(listener);
        label=new JLabel("push a button");
        buttonpanel =new JLabel();
        buttonpanel.setPreferredSize(new Dimension(200,40));
        buttonpanel.setBackground(Color.blue);
        buttonpanel.add(left);
        buttonpanel.add(right);
        setPreferredSize(new Dimension(300,80));
        setBackground(Color.cyan);
        add(label);
        add(buttonpanel);
    }
    private class ButtonListener implements ActionListener{
        public void actionPerformed(ActionEvent event){
            if(event.getSource()==left)
                label.setText("Left");
            else
                label.setText("Right");
        }
    }
}
他在idea中表现为无按钮,在lightly在线编程中表现为按下按钮后界面空白,再按一次恢复
之后我让gpt帮我修改了代码
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class LeftRightPanel extends JPanel {
private JButton left;
private JButton right;
private JLabel label;
private JPanel buttonPanel;

public LeftRightPanel() {
left = new JButton("Left");
right = new JButton("Right");
label = new JLabel("Push a button");

ButtonListener listener = new ButtonListener();
left.addActionListener(listener);
right.addActionListener(listener);

buttonPanel = new JPanel();
buttonPanel.setBackground(Color.blue);
buttonPanel.add(left);
buttonPanel.add(right);

setLayout(new BorderLayout());
add(label, BorderLayout.CENTER);
add(buttonPanel, BorderLayout.SOUTH);
}

private class ButtonListener implements ActionListener {
public void actionPerformed(ActionEvent event) {
if (event.getSource() == left)
label.setText("Left");
else if (event.getSource() == right)
label.setText("Right");
}
}

public static void main(String[] args) {
JFrame frame = new JFrame("Left Right Panel");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(new LeftRightPanel());
frame.pack();
frame.setVisible(true);
}
}
之后就ok了 
它主要修改为
  1. 修改了按钮事件监听器的逻辑,确保正确设置标签文本,通过使用else if语句来判断事件源是左按钮还是右按钮。

  2. 使用BorderLayout作为面板的布局管理器,并设置标签和按钮面板的位置。这样可以让标签在面板中居中显示,按钮面板在底部显示。

  3. 将按钮面板由JLabel改为JPanel,并设置其背景色为蓝色。同时,由于JPanel默认是不透明的,无需再设置Opaque属性。

  4. main方法中创建了一个JFrame窗口,将LeftRightPanel面板添加到窗口中,并设置必要的窗口属性,以显示界面。

posted @ 2023-07-06 16:49  菜鸟de博客  阅读(10)  评论(0)    收藏  举报