Java 如果选中复选框,则将JPanel设置为可见
我有两门课:Java 如果选中复选框,则将JPanel设置为可见,java,swing,jpanel,visible,jcheckbox,Java,Swing,Jpanel,Visible,Jcheckbox,我有两门课: A组 B组 在面板A上,我得到了一个复选框,它(如果选中)应该将面板B设置为可见。到目前为止,我得到的是: public class PanelA extends JPanel { public static JCheckBox shopBox; public PanelA() { setVisible(PanelB.checkBox.isSelected()); } } 这是B组的一部分: checkBox = n
public class PanelA extends JPanel {
public static JCheckBox shopBox;
public PanelA() {
setVisible(PanelB.checkBox.isSelected());
}
}
这是B组的一部分:
checkBox = new JCheckBox("Show PanelA");
add(checkBox);
checkBox.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
//PanelA.setVisible(virusBox.isSelected());
}
});
现在这不起作用了。关于
JPanelA
上的JCheckBox
的状态,如何使JPanelB
可见/不可见?您应该重新绘制框架
this.repaint();
下面给出了一个如何执行此操作的示例:
import java.awt.Color;
import java.awt.Graphics;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
class PanelA extends JPanel implements ActionListener {
private JCheckBox shopBox;
private PanelB panelB;
PanelA() {
shopBox = new JCheckBox();
shopBox.addActionListener(this);
add(shopBox);
setSize(100, 100);
}
public PanelB getPanelB() {
return panelB;
}
public void setPanelB(PanelB panelB) {
this.panelB = panelB;
this.panelB.setVisible(shopBox.isSelected());
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.BLACK);
g.fillRect(0, 0, this.getWidth(), this.getHeight());
}
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == shopBox) {
panelB.setVisible(shopBox.isSelected());
}
}
}
class PanelB extends JPanel {
PanelB() {
setSize(100, 100);
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.RED);
g.fillRect(0, 0, this.getWidth(), this.getHeight());
}
}
public class Main {
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setSize(1000, 1000);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new GridLayout());
PanelA pa = new PanelA();
PanelB pb = new PanelB();
frame.add(pa);
frame.add(pb);
pa.setPanelB(pb);
frame.setVisible(true);
}
}
如果有任何问题/疑问,请随时发表评论。这会有什么变化?它会重新绘制组件,因此组件将更新并显示新面板,因为错误(第“setVisible(ToolbarPanel.virusBox.isSelected();”)行的nullpointer仍然存在1)为了更快地获得更好的帮助,请添加或。硬编码数据以替换数据库。2) 使用如中所示的。第二张卡将是一个空白组件(例如,没有组件的
JPanel
,或没有图标/文本的JLabel
)。