Опитвате се да промените JLabel с помощта на MouseEvent

моята задача е да променя jlabel, като щракна върху етикета, но все още не сме навлезли в адаптерите за мишка и обработката на мишката, преминахме само през замяната на 5 събития на мишката, така че това е всичко, което можем да използваме. Ето какво имам досега, но всичко, което прави, е да променя шрифта на името ми, искам също така да променя цвета на JLabel на червено, когато щракна върху името си.

class FontFrame extends JFrame implements ActionListener{
JButton FirstFont;
JButton SecondFont;
JLabel myName;

public FontFrame(){
setSize(600, 200);
setLocation(300, 200);
Container contentpane = getContentPane();
myName = new JLabel("Aly");
FirstFont = new JButton("Chalkboard 14");
SecondFont = new JButton("Harrington 18");
JPanel panel = new JPanel();
panel.add(FirstFont);
panel.add(SecondFont);
panel.add(myName);
FirstFont.addActionListener(this);
SecondFont.addActionListener(this);
contentpane.add(panel, "Center");
}

public void actionPerformed(ActionEvent e){
Object source = e.getSource();
Font f1 = new Font("Chalkboard", Font.PLAIN, 14);
Font f2 = new Font("Harrington", Font.PLAIN, 18);
if(source == FirstFont){
    myName.setFont(f1);
}
else if(source == SecondFont){
        myName.setFont(f2);
    }
}
}

class mouseFrame extends FontFrame implements MouseListener{

public mouseFrame(){
    addMouseListener(this);
    myName.addMouseListener(this);
    FirstFont.addMouseListener(this);
    SecondFont.addMouseListener(this);
    add(myName);
    add(FirstFont);
    add(SecondFont);
    Container contentpane = getContentPane();
    contentpane.add(new FontFrame());
}

public void mouseClicked(MouseEvent e) {
    int fontbutton = e.getButton();
    if(fontbutton == MouseEvent.BUTTON1 ){
        myName.setForeground(Color.red);
    }
}

public void mouseEntered(MouseEvent e) {
    }

public void mouseExited(MouseEvent e) {
    }

public void mousePressed(MouseEvent e) {

}
public void mouseReleased(MouseEvent e) {
    }
}

public class ChangeFont {
    public static void main(String[] args){
        JFrame frame = new FontFrame();
        frame.setVisible(true);
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    }
}

person Aly Badran    schedule 04.04.2015    source източник


Отговори (1)


  1. Всъщност никога не създавате или показвате екземпляр на MouseFrame
  2. MouseFrame не извиква конструктора на FontFrame (super()), а вместо това се опитва да добави нов екземпляр на FontFrame към него, което е незаконна операция

Започнете, като промените MouseFrame, така че да извиква конструктора super и да добавя само MouseListener към JLabel

public static class MouseFrame extends FontFrame implements MouseListener {

    public MouseFrame() {
        super();
        myName.addMouseListener(this);
    }

    public void mouseClicked(MouseEvent e) {
        System.out.println("...");
        int fontbutton = e.getButton();
        if (fontbutton == MouseEvent.BUTTON1) {
            myName.setForeground(Color.red);
        }
    }

    public void mouseEntered(MouseEvent e) {
    }

    public void mouseExited(MouseEvent e) {
    }

    public void mousePressed(MouseEvent e) {

    }

    public void mouseReleased(MouseEvent e) {
    }

}

След това в метода main създайте екземпляр на MouseFrame...

public static void main(String[] args) {
    JFrame frame = new MouseFrame();
    frame.setVisible(true);
    frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
person MadProgrammer    schedule 04.04.2015
comment
Благодаря ви много, направих точно това, което казахте и се получи безупречно! наистина оценявам помощта :) - person Aly Badran; 05.04.2015