Jak zmienić kolor Buttona

0
        
public class Main0 extends JFrame{
    public Main0(){
        super("Księżyc");
        this.setBounds(100,100,500,500);
        init();
        this.setDefaultCloseOperation(3);
    }
    public void init(){
        panel3.add(wspol);
        panel2.setLayout(new GridLayout(6, 6));
        for(int i=0; i<6; i++)
            for(int j=0; j<6; j++)
                b_buttony();
      
//        panel2.addMouseListener(new myszka());
        panel.add(obszar);
        panel.add(text);
        b_button("KONWERTUJ");
        this.getContentPane().add(panel, BorderLayout.PAGE_START);
        this.getContentPane().add(panel2, BorderLayout.CENTER);
        this.getContentPane().add(panel3, BorderLayout.PAGE_END);
        pack();
    }
    public void b_button(String nazwa){
        JButton przycisk = new JButton(nazwa);
        przycisk.addActionListener(new sluchacz());
        panel.add(przycisk);
    }
    public void b_buttony(){
        JButton przycisk2 = new JButton();
        przycisk2.addMouseListener(new myszka());
        panel2.add(przycisk2);
    }
    private class myszka extends MouseAdapter{
        public void mouseEntered(MouseEvent e) {
           ((b_buttony())e.getSource()).getText(); 
        }
    }
    private class sluchacz implements ActionListener{
        @Override
        public void actionPerformed(ActionEvent e){
//          String odczyt = text.getText();
            obszar.setText(""+Integer.parseInt(text.getText())*2);            
        }
    }   
    public static void main(String[] args){
        new Main0().setVisible(true);
    }    
    private JPanel panel = new JPanel(new FlowLayout(FlowLayout.RIGHT));
    private JPanel panel2 = new JPanel();
    private JPanel panel3 = new JPanel(new FlowLayout(FlowLayout.LEFT));
    private JTextField text = new JTextField(4);
    private JTextArea obszar = new JTextArea(1,4);
    private JTextArea wspol = new JTextArea(1,8);
}

Napisałem taką aplikacje. Mam pytanie, jak zrobić, żeby po najechaniu myszką na buttona zmienić jego kolor na Color.RED?

0

dodać mu mouseListenera i zmieniać kolor w metodach mouseEntered i mouseExited.

Ewentualnie zrobić nową klasę rozszerzającą JButtona i zastępującą metodę paintComponent

0

tak, ale jak wywołać tą zmianę koloru w metodzie mouseEntered?

0
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.*;

 
 
public class Main0 extends JFrame implements MouseListener  {
    public Main0(){
        super("Księżyc");
        this.setBounds(100,100,500,500);
        init();
        this.setDefaultCloseOperation(3);
    }
    public void init(){
        panel3.add(wspol);
        panel2.setLayout(new GridLayout(6, 6));
        for(int i=0; i<6; i++)
            for(int j=0; j<6; j++)
                b_buttony();
 
        panel.add(obszar);
        panel.add(text);
        b_button("KONWERTUJ");
        this.getContentPane().add(panel, BorderLayout.PAGE_START);
        this.getContentPane().add(panel2, BorderLayout.CENTER);
        this.getContentPane().add(panel3, BorderLayout.PAGE_END);
        pack();
    }
    
    public void mousePressed(MouseEvent e) {
    	System.out.println("mousePressed");
    }
    
    public void mouseReleased(MouseEvent e) {
    	System.out.println("mouseReleased");
    }
    
    public void mouseEntered(MouseEvent e) {
        System.out.println("mouseEntered");
    }
    
    public void mouseExited(MouseEvent e) {
    	System.out.println("mouseExited");
    }
    
    public void mouseClicked(MouseEvent e) {
    	System.out.println("mouseClicked");
    }
    
    public void b_button(String nazwa){
        JButton przycisk = new JButton(nazwa);
        przycisk.addActionListener((ActionListener) new sluchacz());
        przycisk.addMouseListener(this);
        panel.add(przycisk);
    }
    public void b_buttony(){
        JButton przycisk2 = new JButton();
        przycisk2.addMouseListener((MouseListener) new myszka());
        panel2.add(przycisk2);
    }
    private class myszka extends MouseAdapter{
       
    }
    
   
    
    private class sluchacz implements ActionListener{
        @Override
        public void actionPerformed(ActionEvent e){
//          String odczyt = text.getText();
            obszar.setText(""+Integer.parseInt(text.getText())*2);            
        }
    }   
    public static void main(String[] args){
        new Main0().setVisible(true);
    }    
    private JPanel panel = new JPanel(new FlowLayout(FlowLayout.RIGHT));
    private JPanel panel2 = new JPanel();
    private JPanel panel3 = new JPanel(new FlowLayout(FlowLayout.LEFT));
    private JTextField text = new JTextField(4);
    private JTextArea obszar = new JTextArea(1,4);
    private JTextArea wspol = new JTextArea(1,8);
}
 

mouseListener jest na buttonie KONWERTUJ

zmiana koloru buttona:

setForegroundColor(Color.red)

I wg. mnie masz lekki śmietnik w kodzie

0

Dzięki :) z tym śmietnikiem to racja, ale już sobie posegreguje

0

Chyba ma to być zmiana koloru buttona, a nie koloru napisu.
Musisz użyć(dla koloru czerwonego):

nazwaButtona.setBackground(Color.red); 
0
   public class Main0 extends JFrame{
    public Main0(){
        super("Księżyc");
        this.setBounds(100,100,500,500);
        init();
        this.setDefaultCloseOperation(3);
    }
    public void init(){
        panel3.add(wspol);
        panel2.setLayout(new GridLayout(6, 6));
        for(int i=0; i<6; i++)
            for(int j=0; j<6; j++)
                b_buttony();
        final JPopupMenu kontekst = new JPopupMenu();
        kontekst.add(new JMenuItem()); 
//        panel2.addMouseListener(new myszka());
        panel.add(obszar);
        panel.add(text);
        b_button("KONWERTUJ");
        this.getContentPane().add(panel, BorderLayout.PAGE_START);
        this.getContentPane().add(panel2, BorderLayout.CENTER);
        this.getContentPane().add(panel3, BorderLayout.PAGE_END);
        pack();
    }
    public void b_button(String nazwa){
        JButton przycisk = new JButton(nazwa);
        przycisk.addActionListener(new sluchacz());
        panel.add(przycisk);
    }
    public void b_buttony(){
        JButton przycisk2 = new JButton();
        przycisk2.addMouseListener(new myszka());
        panel2.add(przycisk2);
    }
    private class myszka extends MouseAdapter{
        public void mouseEntered(MouseEvent e) {
           wspol.setText(e.getX()+" i "+e.getY());
        }
    }
    private class sluchacz implements ActionListener{
        @Override
        public void actionPerformed(ActionEvent e){
//          String odczyt = text.getText();
            obszar.setText(""+Integer.parseInt(text.getText())*2);            
        }
    }   
    public static void main(String[] args){
        new Main0().setVisible(true);
    }    
    private JPanel panel = new JPanel(new FlowLayout(FlowLayout.RIGHT));
    private JPanel panel2 = new JPanel();
    private JPanel panel3 = new JPanel(new FlowLayout(FlowLayout.LEFT));
    private JTextField text = new JTextField(4);
    private JTextArea obszar = new JTextArea(1,4);
    private JTextArea wspol = new JTextArea(1,8);
}

Mam jeszcze jedno ostatni problem, jak zrobić, że po najechaniu myszką na button w GridLayout wyświetlało w menu kontekstowym (JPopupMenu) aktualną pozycję kursora. Pisałem o tym ze specjalistami, ale żaden do końca nie wie jak to zrobić. Także będę wdzięczny za pomoc!

0

To przecież zrobiłeś:

wspol.setText(e.getX()+" i "+e.getY());

Teraz wystarczy zrobić listener entered, a w nim wyświetlenie JPopupMenu , który pokazuje naszą pozycję (e.getX, e.getY), natępnie dodać Exited litener, który zamyka JPopupMenu

0

hmm taki mądry to ja nie jestem... gdzie musiałby kod dokładnie być zmieniony?

0

package main0;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
        
public class Main0 extends JFrame{
    public Main0(){
        super("Księżyc");
        this.setBounds(100,100,500,500);
        init();
        this.setDefaultCloseOperation(3);
    }
    public void init(){
        panel3.add(wspol);
        panel2.setLayout(new GridLayout(6, 6));
        for(int i=0; i<6; i++)
            for(int j=0; j<6; j++)
                b_buttony();
//        panel2.addMouseListener(new myszka());
        panel.add(obszar);
        panel.add(text);
        b_button("KONWERTUJ");
        this.getContentPane().add(panel, BorderLayout.PAGE_START);
        this.getContentPane().add(panel2, BorderLayout.CENTER);
        this.getContentPane().add(panel3, BorderLayout.PAGE_END);
        pack();
    }
    public void b_button(String nazwa){
        JButton przycisk = new JButton(nazwa);
        przycisk.addActionListener(new sluchacz());
        panel.add(przycisk);
    }
    public void b_buttony(){
        JButton przycisk2 = new JButton();
        przycisk2.addMouseListener(new myszka());
        panel2.add(przycisk2);
    }
    private class myszka extends MouseAdapter{
        public void mouseEntered(MouseEvent e) {
           wspol.setText(e.getX()+" i "+e.getY());
          
         if(e.isPopupTrigger()) kontekst.show(e.getComponent(), e.getX(), e.getY());
        }
    }
    private class sluchacz implements ActionListener{
        @Override
        public void actionPerformed(ActionEvent e){
//          String odczyt = text.getText();
            obszar.setText(""+Integer.parseInt(text.getText())*2);            
        }
    }   
    public static void main(String[] args){
        new Main0().setVisible(true);
    }    
    private JPanel panel = new JPanel(new FlowLayout(FlowLayout.RIGHT));
    private JPanel panel2 = new JPanel();
    private JPanel panel3 = new JPanel(new FlowLayout(FlowLayout.LEFT));
    private JTextField text = new JTextField(4);
    private JTextArea obszar = new JTextArea(1,4);
    private JTextArea wspol = new JTextArea(1,8);
    final JPopupMenu kontekst = new JPopupMenu();
}

Zrobiłem coś takiego, ale to i tak nie działa...

0

Właściwie dalej nie wiem jak zmieniać kolory buttonów stworzonych w GridLayout po najechaniu myszką na któryś z nich?

0

Kilka przycisków dodanych w pętli:

for (int i=0;i<5;i++)
{
     JButton b=new JButton("A | "+(i+1));
     b.addMouseListener(this);
     add(b);
}

obsługa zdarzenia:

    public void mouseEntered(MouseEvent e)
    {
        e.getComponent().setBackground(Color.RED);
    }
0

Super, dzięki serdeczne! Jeszcze jedna sprawa jak zrobić wyświetlanie współrzędnych myszki po najechaniu buttona w menu kontekstowego (JPopup)?

0

oczywiście buttona w GrdiLayout

0

Naprawdę nikt nie wie? Jest to mi potrzebne wiedzieć, bo za pół h piszę sesje :/

1 użytkowników online, w tym zalogowanych: 0, gości: 1