周四 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);
}
}
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了
它主要修改为
-
修改了按钮事件监听器的逻辑,确保正确设置标签文本,通过使用
else if语句来判断事件源是左按钮还是右按钮。 -
使用
BorderLayout作为面板的布局管理器,并设置标签和按钮面板的位置。这样可以让标签在面板中居中显示,按钮面板在底部显示。 -
将按钮面板由
JLabel改为JPanel,并设置其背景色为蓝色。同时,由于JPanel默认是不透明的,无需再设置Opaque属性。 -
在
main方法中创建了一个JFrame窗口,将LeftRightPanel面板添加到窗口中,并设置必要的窗口属性,以显示界面。

浙公网安备 33010602011771号