使用单选按钮侦听器时两个标签相互重叠
Two labels overlap each other when using the Radio Button Listener
我制作了一个简单的程序,其中有两个单选按钮,每个按钮都有一个动作侦听器。
按下第一个按钮后,将打印一个标签,另一个也会发生同样的事情。
问题是按下第一个和第二个按钮后两个标签重叠。
编辑-必须删除之前的标签,然后新标签必须出现在屏幕上。
前
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
class ckbxdm{
JFrame frame;
JRadioButton r1,r2;
ButtonGroup grp;
JLabel l1,l2;
void box(){
frame=new JFrame("Hello");
r1=new JRadioButton("Login");
r2=new JRadioButton("Signup");
grp=new ButtonGroup();
grp.add(r1);
grp.add(r2);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(null);
frame.getContentPane().add(r1);
frame.getContentPane().add(r2);
r1.setBounds(100,120,100,20);
r2.setBounds(200,120,100,20);
frame.setBounds(100,100,500,500);
frame.setVisible(true);
r1.addActionListener(new listener1());
r2.addActionListener(new listener2());
}
class listener1 implements ActionListener{
public void actionPerformed(ActionEvent ae){
frame.getContentPane().repaint();
frame.getContentPane().revalidate();
l1=new JLabel("Login area");
frame.getContentPane().add(l1);
l1.setBounds(100,200,100,20);
}
}
class listener2 implements ActionListener{
public void actionPerformed(ActionEvent ae){
frame.getContentPane().repaint();
frame.getContentPane().revalidate();
l2=new JLabel("Signup area");
frame.getContentPane().add(l2);
l2.setBounds(100,200,100,20);
}
}
public void itemStateChanged(ItemEvent ie){
frame.repaint();
}
}
public class CheckboxDemo{
public static void main(String args[]){
ckbxdm obj=new ckbxdm();
obj.box();
}
}
尝试在 X-Y 坐标方向上更改您的 "sign up position",假设更改以下代码行 l2.setBounds(100,200,100,20);
到
l2.setBounds(200,200,100,20);
与 l1
相同的方式将其更改为 l1.setBounds(50,200,100,20);
, 肯定有用
除了上面提供的答案,如果你想隐藏另一个标签,你可以将其可见性设置为false
并重新绘制父组件。您可以了解更多 from here。请注意,在这里调用 revalidate 方法是不必要的,因为您没有从层次结构中删除任何组件。
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
class ckbxdm{
JFrame frame;
JRadioButton r1,r2;
ButtonGroup grp;
JLabel l1,l2;
void box(){
frame=new JFrame("Hello");
r1=new JRadioButton("Login");
r2=new JRadioButton("Signup");
grp=new ButtonGroup();
grp.add(r1);
grp.add(r2);
l1=new JLabel("Login area");
l1.setBounds(100,200,100,20);
l1.setVisible(false);
frame.getContentPane().add(l1);
l2=new JLabel("Signup area");
l2.setBounds(100,200,100,20);
l2.setVisible(false);
frame.getContentPane().add(l2);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(null);
frame.getContentPane().add(r1);
frame.getContentPane().add(r2);
r1.setBounds(100,120,100,20);
r2.setBounds(200,120,100,20);
frame.setBounds(100,100,500,500);
frame.setVisible(true);
r1.addActionListener(new listener1());
r2.addActionListener(new listener2());
}
class listener1 implements ActionListener{
public void actionPerformed(ActionEvent ae){
l2.setVisible(false);
l1.setVisible(true);
frame.getContentPane().repaint();
}
}
class listener2 implements ActionListener{
public void actionPerformed(ActionEvent ae){
l1.setVisible(false);
l2.setVisible(true);
frame.getContentPane().repaint();
}
}
public void itemStateChanged(ItemEvent ie){
frame.repaint();
}
}
public class CheckboxDemo{
public static void main(String args[]){
ckbxdm obj=new ckbxdm();
obj.box();
}
}
我制作了一个简单的程序,其中有两个单选按钮,每个按钮都有一个动作侦听器。 按下第一个按钮后,将打印一个标签,另一个也会发生同样的事情。 问题是按下第一个和第二个按钮后两个标签重叠。
编辑-必须删除之前的标签,然后新标签必须出现在屏幕上。
前
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
class ckbxdm{
JFrame frame;
JRadioButton r1,r2;
ButtonGroup grp;
JLabel l1,l2;
void box(){
frame=new JFrame("Hello");
r1=new JRadioButton("Login");
r2=new JRadioButton("Signup");
grp=new ButtonGroup();
grp.add(r1);
grp.add(r2);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(null);
frame.getContentPane().add(r1);
frame.getContentPane().add(r2);
r1.setBounds(100,120,100,20);
r2.setBounds(200,120,100,20);
frame.setBounds(100,100,500,500);
frame.setVisible(true);
r1.addActionListener(new listener1());
r2.addActionListener(new listener2());
}
class listener1 implements ActionListener{
public void actionPerformed(ActionEvent ae){
frame.getContentPane().repaint();
frame.getContentPane().revalidate();
l1=new JLabel("Login area");
frame.getContentPane().add(l1);
l1.setBounds(100,200,100,20);
}
}
class listener2 implements ActionListener{
public void actionPerformed(ActionEvent ae){
frame.getContentPane().repaint();
frame.getContentPane().revalidate();
l2=new JLabel("Signup area");
frame.getContentPane().add(l2);
l2.setBounds(100,200,100,20);
}
}
public void itemStateChanged(ItemEvent ie){
frame.repaint();
}
}
public class CheckboxDemo{
public static void main(String args[]){
ckbxdm obj=new ckbxdm();
obj.box();
}
}
尝试在 X-Y 坐标方向上更改您的 "sign up position",假设更改以下代码行 l2.setBounds(100,200,100,20);
到
l2.setBounds(200,200,100,20);
与 l1
相同的方式将其更改为 l1.setBounds(50,200,100,20);
, 肯定有用
除了上面提供的答案,如果你想隐藏另一个标签,你可以将其可见性设置为false
并重新绘制父组件。您可以了解更多 from here。请注意,在这里调用 revalidate 方法是不必要的,因为您没有从层次结构中删除任何组件。
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
class ckbxdm{
JFrame frame;
JRadioButton r1,r2;
ButtonGroup grp;
JLabel l1,l2;
void box(){
frame=new JFrame("Hello");
r1=new JRadioButton("Login");
r2=new JRadioButton("Signup");
grp=new ButtonGroup();
grp.add(r1);
grp.add(r2);
l1=new JLabel("Login area");
l1.setBounds(100,200,100,20);
l1.setVisible(false);
frame.getContentPane().add(l1);
l2=new JLabel("Signup area");
l2.setBounds(100,200,100,20);
l2.setVisible(false);
frame.getContentPane().add(l2);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(null);
frame.getContentPane().add(r1);
frame.getContentPane().add(r2);
r1.setBounds(100,120,100,20);
r2.setBounds(200,120,100,20);
frame.setBounds(100,100,500,500);
frame.setVisible(true);
r1.addActionListener(new listener1());
r2.addActionListener(new listener2());
}
class listener1 implements ActionListener{
public void actionPerformed(ActionEvent ae){
l2.setVisible(false);
l1.setVisible(true);
frame.getContentPane().repaint();
}
}
class listener2 implements ActionListener{
public void actionPerformed(ActionEvent ae){
l1.setVisible(false);
l2.setVisible(true);
frame.getContentPane().repaint();
}
}
public void itemStateChanged(ItemEvent ie){
frame.repaint();
}
}
public class CheckboxDemo{
public static void main(String args[]){
ckbxdm obj=new ckbxdm();
obj.box();
}
}