簡體   English   中英

使用單選按鈕偵聽器時,兩個標簽彼此重疊

[英]Two labels overlap each other when using the Radio Button Listener

我編寫了一個簡單的程序,其中有兩個單選按鈕,每個按鈕都有一個動作偵聽器。 按下第一個按鈕后,將打印一個標簽,而另一個則發生相同的情況。 問題是兩個標簽在按下第一個和第二個按鈕后重疊。

編輯-必須刪除上一個標簽,然后新標簽必須在屏幕上。
EX-

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-Ycooridantes方向上更改您的“注冊位置”,假設更改以下代碼l2.setBounds(100,200,100,20);

l2.setBounds(200,200,100,20);

並以相同的方式將l1更改為l1.setBounds(50,200,100,20); ,肯定會起作用

除了上面提供的答案外,如果要隱藏其他標簽,可以將其可見性設置為false並重新繪制父組件。 您可以從這里了解更多信息 請注意,此處不需要調用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();
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM