gpt4 book ai didi

java - 最初隐藏的单选按钮在事件中不可见

转载 作者:行者123 更新时间:2023-11-30 07:51:55 25 4
gpt4 key购买 nike

我试图在单击单选按钮时使组件可见。RadioButton 的初始化隐藏在 initComponents 方法中。

我在单选按钮上放置了一个 mouseClickListener。如果我初始化隐藏的单选按钮,它不起作用。如果我将其初始化为可见(默认),则有效:

look at this

我也尝试过在 pre-post init 时进行初始化。

这些是 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);
}

最佳答案

  1. 在 JRadioButton 上使用 ItemListener,而不是 MouseListener。
  2. 设置组件可见或不可见后,请务必在父容器(通常是 JPanel)上调用 revalidate()repaint(),该父容器包含其组件您已更改的可见性。重新验证允许容器的布局管理器重新布局其组件,而重新绘制允许 Graphics 对象重新绘制容器及其所有组件。
  3. 如需更详细的帮助,请考虑创建并发布 minimal example program (请查看链接)。

例如,

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();
}
});
}
}

关于java - 最初隐藏的单选按钮在事件中不可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33241321/

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