最初隐藏的单选按钮在事件中不可见
Initially hidden radioButton dont be visible on event
我试图在单击单选按钮时使组件可见。
RadioButton 初始化隐藏在 initComponents 方法中。
我在单选按钮上放置了一个 mouseClickListener。如果我初始化隐藏的 radioButton,它就不起作用。如果我初始化它可见(默认):
我也尝试过在 post 初始化之前进行初始化。
这些是 myListeners 并且 txtMaas 已初始化隐藏:
private void rbOgretmenMouseClicked(java.awt.event.MouseEvent evt) {
// TODO add your handling code here:
txtMaas.setVisible(true);
}
private void rbOgrenciMouseClicked(java.awt.event.MouseEvent evt) {
// TODO add your handling code here:
txtMaas.setVisible(false);
}
- 在 JRadioButton 上使用 ItemListener,而不是 MouseListener。
- 将组件设置为可见或不可见后,请务必在父容器(通常是 JPanel)上调用
revalidate()
和 repaint()
,它包含已更改其可见性的组件。 revalidate 允许容器的布局管理器重新布局其组件,repaint 允许 Graphics 对象重新绘制容器及其所有组件。
- 如需更详细的帮助,请考虑创建并发布 minimal example program(请查看 link)。
例如,
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import javax.swing.*;
public class RadioFun extends JPanel {
private static final int PREF_W = 300;
private static final int PREF_H = 150;
private JRadioButton rbOgret = new JRadioButton("Ogret");
private JTextField txtMaas = new JTextField(10);
public RadioFun() {
setLayout(new FlowLayout(FlowLayout.LEADING));
add(rbOgret);
add(txtMaas);
txtMaas.setVisible(false);
rbOgret.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
rbOgretItemStateChanged(e);
}
});
}
// to make the GUI large enough
@Override
public Dimension getPreferredSize() {
if (isPreferredSizeSet()) {
return super.getPreferredSize();
}
return new Dimension(PREF_W, PREF_H);
}
private void rbOgretItemStateChanged(ItemEvent e) {
boolean visible = e.getStateChange() == ItemEvent.SELECTED;
txtMaas.setVisible(visible);
// call repaint and revalidate on the holding JPanel:
revalidate();
repaint();
}
// the two methods below are to create the GUI on the Swing event thread
private static void createAndShowGui() {
JFrame frame = new JFrame("RadioFun");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(new RadioFun());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGui();
}
});
}
}
我试图在单击单选按钮时使组件可见。 RadioButton 初始化隐藏在 initComponents 方法中。
我在单选按钮上放置了一个 mouseClickListener。如果我初始化隐藏的 radioButton,它就不起作用。如果我初始化它可见(默认):
我也尝试过在 post 初始化之前进行初始化。
这些是 myListeners 并且 txtMaas 已初始化隐藏:
private void rbOgretmenMouseClicked(java.awt.event.MouseEvent evt) {
// TODO add your handling code here:
txtMaas.setVisible(true);
}
private void rbOgrenciMouseClicked(java.awt.event.MouseEvent evt) {
// TODO add your handling code here:
txtMaas.setVisible(false);
}
- 在 JRadioButton 上使用 ItemListener,而不是 MouseListener。
- 将组件设置为可见或不可见后,请务必在父容器(通常是 JPanel)上调用
revalidate()
和repaint()
,它包含已更改其可见性的组件。 revalidate 允许容器的布局管理器重新布局其组件,repaint 允许 Graphics 对象重新绘制容器及其所有组件。 - 如需更详细的帮助,请考虑创建并发布 minimal example program(请查看 link)。
例如,
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import javax.swing.*;
public class RadioFun extends JPanel {
private static final int PREF_W = 300;
private static final int PREF_H = 150;
private JRadioButton rbOgret = new JRadioButton("Ogret");
private JTextField txtMaas = new JTextField(10);
public RadioFun() {
setLayout(new FlowLayout(FlowLayout.LEADING));
add(rbOgret);
add(txtMaas);
txtMaas.setVisible(false);
rbOgret.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
rbOgretItemStateChanged(e);
}
});
}
// to make the GUI large enough
@Override
public Dimension getPreferredSize() {
if (isPreferredSizeSet()) {
return super.getPreferredSize();
}
return new Dimension(PREF_W, PREF_H);
}
private void rbOgretItemStateChanged(ItemEvent e) {
boolean visible = e.getStateChange() == ItemEvent.SELECTED;
txtMaas.setVisible(visible);
// call repaint and revalidate on the holding JPanel:
revalidate();
repaint();
}
// the two methods below are to create the GUI on the Swing event thread
private static void createAndShowGui() {
JFrame frame = new JFrame("RadioFun");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(new RadioFun());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGui();
}
});
}
}