gpt4 book ai didi

java - JRadioButton 鼠标悬停后才会出现

转载 作者:行者123 更新时间:2023-11-30 05:57:42 27 4
gpt4 key购买 nike

import java.awt.Frame;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import javax.swing.*;

public class IndicatorWindow implements ItemListener {

JRadioButton RMA, EMA, SMA, Williams, Stochastic;
JPanel IndPan, RadioPanel, title;
JLabel Lab;
JButton OK;

public JPanel createContentPane() {
JPanel GUI = new JPanel();
GUI.setLayout(null);

title = new JPanel();
title.setLayout(null);
title.setLocation(0, 0);
title.setSize(500, 145);
GUI.add(title);

Lab = new JLabel("Please Select Indicator Type");
Lab.setLocation(5, 0);
Lab.setSize(200, 30);

title.add(Lab);

ButtonGroup bg1 = new ButtonGroup();

RadioPanel = new JPanel();
RadioPanel.setLayout(null);
RadioPanel.setLocation(10, 30);
RadioPanel.setSize(190, 220);
GUI.add(RadioPanel);

RMA = new JRadioButton("RMA");
RMA.setLocation(0, 0);
RMA.addItemListener(this);
RMA.setSize(110, 20);
bg1.add(RMA);
RadioPanel.add(RMA);

EMA = new JRadioButton("EMA");
EMA.setLocation(0, 30);
EMA.addItemListener(this);
EMA.setSize(110, 20);
bg1.add(EMA);
RadioPanel.add(EMA);

SMA = new JRadioButton("SMA");
SMA.setLocation(0, 60);
SMA.addItemListener(this);
SMA.setSize(110, 20);
bg1.add(SMA);
RadioPanel.add(SMA);

Stochastic = new JRadioButton("Stochastic");
Stochastic.setLocation(0, 90);
Stochastic.addItemListener(this);
Stochastic.setSize(110, 20);
bg1.add(Stochastic);
RadioPanel.add(Stochastic);

Williams = new JRadioButton("Williams");
Williams.setLocation(0, 120);
Williams.addItemListener(this);
Williams.setSize(110, 20);
bg1.add(Williams);
RadioPanel.add(Williams);

OK = new JButton();
OK.setText("Confirm");
OK.setLocation(45, 150);
OK.addItemListener(this);
OK.setSize(90, 30);
RadioPanel.add(OK);

//GUI.setOpaque(true);
return GUI;

}

public void itemStateChanged(ItemEvent e) {
Object source = e.getItemSelectable();
if (source == RMA) {
System.out.print("Browse");
} else if (source == EMA) {
System.out.print("EMA");
} else if (source == SMA) {
System.out.print("SMA");
} else if (source == Williams) {
System.out.print("Williams");
} else if (source == Stochastic) {
System.out.print("Stochastic");
}
}

private static void createAndShowGUI() {
JFrame frame = new JFrame("Indicators");

IndicatorWindow ind = new IndicatorWindow();
frame.setContentPane(ind.createContentPane());

frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.setSize(200, 250);
frame.setLayout(null);
frame.setResizable(true);
frame.setLocationRelativeTo(null);

frame.setVisible(true);
frame.setAlwaysOnTop(true);
frame.setState(Frame.NORMAL);
}

public static void main(String[] args) {

SwingUtilities.invokeLater(new Runnable() {

public void run() {
createAndShowGUI();
}
});
}
}

我的问题是,当我编译并运行此代码时,会出现 jFrame,但只有一个问题,只有将鼠标放在 3 个 JRadioButton 上才会出现。 RMA 和 Williams 单选按钮出现,但中间的 3 没有出现,有什么想法为什么会这样吗?

/image/gNnIb.jpg

最佳答案

您应该使用布局管理器。人们认为使用“空布局”更容易,但事实并非如此,并且您的代码更容易出现错误。布局管理器将正确定位组件并调整其大小,以确保显示所有组件。有时您甚至使用多个不同的布局管理器来实现您想要的布局。

在这种情况下,您的问题是您的容器中有两个组件占用相同的空间。因此,一个组件会被绘制在另一个组件之上。将鼠标悬停在单选按钮上后,由于按钮的翻转效果,该按钮将被重新绘制。但是,现在尝试调整框架大小,单选按钮将会消失,因为所有组件都被重新绘制,并且组件再次绘制在按钮之上。

下面这行代码就是问题所在:

// title.setSize(500, 145);
title.setSize(500, 20);

但真正的解决方案是重写代码并使用布局管理器。当您使用它时,请使用正确的 Java 命名约定。变量名称不以大写字母开头。您的“标题”和“bg1”正确。因此请修复“EMA”、“RMA”等...

关于java - JRadioButton 鼠标悬停后才会出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5255337/

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