2014-03-27 45 views
0

嗨我想让我使用3 JButtons的Java桌面应用程序。我想,当我点击任何JButton它应该改变该按钮的颜色,如果我点击任何其他JButton然后以前点击按钮应该像以前和最近点击按钮改变它的颜色,直到另一个JButton被点击如何使用JButton?

怎么可以我做到这一点

这里是我的按钮代码

b1 = new JButton("Ok"); 
b1.setBounds(800, 725, 100, 40); 
b1.setForeground(Color.BLACK); 
c.add(b1); 

b2 = new JButton("Print"); 
b2.setBounds(925, 725, 100, 40); 
b2.setForeground(Color.BLACK); 
c.add(b2); 
b1.addActionListener(new ActionListener() { 
    public void actionPerformed(ActionEvent ae){ 
     b1.setBackground(Color.BLUE); 
     JOptionPane.showMessageDialog(frame,"Welcome to allhabad High Court"); 
    } 
}); 

b2.addActionListener(new ActionListener() { 
    public void actionPerformed(ActionEvent ae){ 
     b2.setBackground(Color.BLUE); 
     JOptionPane.showMessageDialog(frame,"Welcome to allhabad High Court"); 
    } 
}); 

回答

0
 b1.addActionListener(new ActionListener() { 
public void actionPerformed(ActionEvent ae){ 
     b1.setBackground(Color.BLUE); 
     b2.setBackground(Color.BLACK); 
JOptionPane.showMessageDialog(frame,"Welcome to allhabad High Court"); 
} 
}); 

    b2.addActionListener(new ActionListener() { 
public void actionPerformed(ActionEvent ae){ 
     b2.setBackground(Color.BLUE); 
     b1.setBackground(Color.BLACK); 
JOptionPane.showMessageDialog(frame,"Welcome to allhabad High Court"); 
} 
}); 
3

这实际上是更棘手的则它的声音。某些外观渲染时的按钮(例如Windows)中

一个可能的解决方案可能是使用不使用background color属性ButtonGroupJToggleButton,这将确保只有一个按钮,在时间选择可以监视按钮的选择状态,例如...

toggle

import java.awt.Color; 
import java.awt.EventQueue; 
import java.awt.GridBagLayout; 
import javax.swing.ButtonGroup; 
import javax.swing.JFrame; 
import javax.swing.JToggleButton; 
import javax.swing.UIManager; 
import javax.swing.UnsupportedLookAndFeelException; 
import javax.swing.event.ChangeEvent; 
import javax.swing.event.ChangeListener; 

public class ToggleButton { 

    public static void main(String[] args) { 
     new ToggleButton(); 
    } 

    public ToggleButton() { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
       } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { 
       } 

       final JToggleButton b1 = new JToggleButton("Ok"); 
       b1.setContentAreaFilled(false); 
       b1.setOpaque(true); 
       b1.getModel().addChangeListener(new ChangeListener() { 
        @Override 
        public void stateChanged(ChangeEvent e) { 
         if (b1.isSelected()) { 
          b1.setBackground(Color.BLACK); 
         } else { 
          b1.setBackground(null); 
         } 
        } 
       }); 
       final JToggleButton b2 = new JToggleButton("Print"); 
       b2.setContentAreaFilled(false); 
       b2.setOpaque(true); 
       b2.getModel().addChangeListener(new ChangeListener() { 
        @Override 
        public void stateChanged(ChangeEvent e) { 
         if (b2.isSelected()) { 
          b2.setBackground(Color.BLUE); 
         } else { 
          b2.setBackground(null); 
         } 
        } 
       }); 

       ButtonGroup bg = new ButtonGroup(); 
       bg.add(b1); 
       bg.add(b2); 

       JFrame frame = new JFrame("Testing"); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.setLayout(new GridBagLayout()); 
       frame.add(b1); 
       frame.add(b2); 
       frame.pack(); 
       frame.setLocationRelativeTo(null); 
       frame.setVisible(true); 
      } 
     }); 
    } 

} 

另一种解决方案可以是使用JRadioButton代替,其通常用于表示由一组单个选择的选项。

请参阅How to Use Buttons, Check Boxes, and Radio Buttons