gpt4 book ai didi

java - 在 JButton 中显示结果时出错

转载 作者:行者123 更新时间:2023-12-01 12:02:25 25 4
gpt4 key购买 nike

如下面这些代码,我将在North上创建一个JButton,当我点击它时,它会改变句子,并且存在一些问题,点击后单词不会改变!而且,我运行问题(测试)后显示的框架、正方形和北文本栏(JButton)消失了!我应该把窗口拉大一些,然后条形图和方 block 就会再次出现!

import javax.swing.*;

import java.awt.*;

import java.awt.event.*;

public class GrowAndShrinkSquareGUI {
JFrame frame;
JButton clickButton;
GrowAndShrinkListener listener;

public class SquareDrawPanel extends JPanel {
int squareSize = 100;
int width = frame.getWidth();
int height = frame.getHeight();

public SquareDrawPanel() {
super();
}

public void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.BLUE);
g.fillRect(getWidth() / 2 - squareSize / 2,
getHeight() / 2 - squareSize / 2,
squareSize, squareSize);
}
}

public class GrowAndShrinkListener implements ActionListener {
GrowAndShrinkListener(JButton button) {
button = new JButton("Click me to grow the Square");
frame.add(button, BorderLayout.NORTH);
button.addActionListener(this);
}

public void actionPerformed(ActionEvent e) {
Object source = e.getSource();
if (source instanceof JButton) {
clickButton = (JButton) source;
clickButton.setText("Click to shrink square");
}
}
}

public static void main(String[] args) {
GrowAndShrinkSquareGUI test = new GrowAndShrinkSquareGUI();
test.go();
}

private void createListenerButton() {
listener = new GrowAndShrinkListener(clickButton);
}

public void go() {
frame = new JFrame();
frame.setSize(500, 500);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
SquareDrawPanel squareDraw = new SquareDrawPanel();
createListenerButton();
Container cpane = frame.getContentPane();
cpane.add(squareDraw, BorderLayout.CENTER);
// 5) set JButton to show text
clickButton = new JButton("Click me to grow the square");
cpane.add(clickButton, BorderLayout.NORTH);
}
}

最佳答案

您的问题是您在分配监听器后创建按钮。将 createListenerButton() 调用移至 go() 内的最后一行。

public void go() {
// ...
clickButton = new JButton("Click me to grow the square");
cpane.add(clickButton, BorderLayout.NORTH);
createListenerButton();
// ...
}

看起来您还添加了两次按钮。你把事情搞得太复杂了。

public class GrowAndShrinkListener // ...
frame.add(button, BorderLayout.NORTH);
// ....
}

public void go() // ...
cpane.add(clickButton, BorderLayout.NORTH);
// ....
}

尝试以下操作:

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

public class GrowAndShrinkSquareGUI {
private JFrame frame;
private JButton clickButton;
private GrowAndShrinkListener listener;

public class SquareDrawPanel extends JPanel {
int squareSize = 100;
int width = frame.getWidth();
int height = frame.getHeight();

public SquareDrawPanel() {
super();
}

public void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.BLUE);
g.fillRect(getWidth() / 2 - squareSize / 2, getHeight() / 2
- squareSize / 2, squareSize, squareSize);
}
}

public class GrowAndShrinkListener implements ActionListener {
private JButton button;

public GrowAndShrinkListener(JButton button) {
this.button = button;
this.button.addActionListener(this);
}

public void actionPerformed(ActionEvent e) {
Object source = e.getSource();
if (source instanceof JButton && ((JButton) source) == button) {
button.setText("Click to shrink square");
}
}
}

private void createListenerButton(JButton button) {
listener = new GrowAndShrinkListener(button);
}

public void go() {
frame = new JFrame();
frame.setSize(500, 500);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
SquareDrawPanel squareDraw = new SquareDrawPanel();
Container cpane = frame.getContentPane();
cpane.add(squareDraw, BorderLayout.CENTER);
// 5) set JButton to show text
clickButton = new JButton("Click me to grow the square");
cpane.add(clickButton, BorderLayout.NORTH);
createListenerButton(clickButton);
}

public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
GrowAndShrinkSquareGUI test = new GrowAndShrinkSquareGUI();
test.go();
}
});
}
}

关于java - 在 JButton 中显示结果时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27900429/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com