0

16 進値を表示する GUI を作成しようとしています。これは、選択された JRadioButton に基づいて関連付けられた色です。私の ActionListener は、個々のラジオ ボタンをオブジェクト キーとして格納する hashMap エントリと、それに関連付けられた 16 進値 (文字列) を検索します。

hashMap.get ピースを使用して 16 進値を取得できますが、アクション リスナーが「jrbBlue」などのハードコードされたものだけでなく、任意の JRadioButton を参照するようにするにはどうすればよいですか?

JRadioButton.addActionListener(Error - "型 AbstractButton から非静的メソッド addActionListener(ActionListener) への静的参照を作成できません") または jpRadioButton.addActionListener、ボタン用の私の JPanel (必要です) addActionListener を addComponentListener に変更し、他の一連の addWhatevers を変更しますが、どれも機能しません)。

この全体を書くには他の方法があることに気づきましたが、私は自分が持っているものを使って作業することに縛られており、まだ学んでいます.

前もって感謝します。

import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
import javax.swing.border.*;

public class Colors extends JFrame  {

static Map<Object, String> hashMap = new HashMap<Object, String>();

String hex = "Hex Value";

//----  The JLabel message (hex value of the color selected)
private JLabel jlblMessage = new JLabel(hex, JLabel.CENTER);

//----  Create the radio buttons
private static JRadioButton jrbBlue = new JRadioButton("Blue");
private static JRadioButton jrbPurplish = new JRadioButton("Purplish");
private static JRadioButton jrbRed = new JRadioButton("Red");
private static JRadioButton jrbYellow = new JRadioButton("Yellow");
private static JRadioButton jrbGreen = new JRadioButton("Green");
private static JRadioButton jrbOrange = new JRadioButton("Orange");
private static JRadioButton jrbCyan = new JRadioButton("Cyan");
private static JRadioButton jrbCoral = new JRadioButton("Coral");
private static JRadioButton jrbFuscia = new JRadioButton("Fuscia");
private static JRadioButton jrbViolet = new JRadioButton("Violet");
private static JRadioButton jrbDodgerBlue = new JRadioButton("Dodger Blue");
private static JRadioButton jrbGrey = new JRadioButton("Grey");
private static JRadioButton jrbWhite = new JRadioButton("White");
private static JRadioButton jrbCrimson = new JRadioButton("Crimson");
private static JRadioButton jrbDarkOrchid = new JRadioButton("Dark Orchid");
private static JRadioButton jrbFirebrick = new JRadioButton("Firebrick");
private static JRadioButton jrbHotPink = new JRadioButton("Hot Pink");
private static JRadioButton jrbMaroon = new JRadioButton("Maroon");
private static JRadioButton jrbDarkBlue = new JRadioButton("Dark Blue");
private static JRadioButton jrbTurquoise = new JRadioButton("Turquoise");

public Colors() {

    //----  JLabel placement
    jlblMessage.setBorder(new LineBorder(Color.BLACK, 2));
    add(jlblMessage, BorderLayout.CENTER);

    //----  Add the radio buttons to the JPanel
    JPanel jpRadioButtons = new JPanel();
    jpRadioButtons.setLayout(new GridLayout(3, 1));
    jpRadioButtons.add(jrbBlue);
    jpRadioButtons.add(jrbPurplish);
    jpRadioButtons.add(jrbRed);
    jpRadioButtons.add(jrbYellow);
    jpRadioButtons.add(jrbGreen);
    jpRadioButtons.add(jrbOrange);
    jpRadioButtons.add(jrbCyan);
    jpRadioButtons.add(jrbCoral);
    jpRadioButtons.add(jrbFuscia);
    jpRadioButtons.add(jrbViolet);
    jpRadioButtons.add(jrbDodgerBlue);
    jpRadioButtons.add(jrbGrey);
    jpRadioButtons.add(jrbWhite);
    jpRadioButtons.add(jrbCrimson);
    jpRadioButtons.add(jrbDarkOrchid);
    jpRadioButtons.add(jrbFirebrick);
    jpRadioButtons.add(jrbHotPink);
    jpRadioButtons.add(jrbMaroon);
    jpRadioButtons.add(jrbDarkBlue);
    jpRadioButtons.add(jrbTurquoise);

    add(jpRadioButtons, BorderLayout.WEST);

    //----  Add all the buttons to the same group
    ButtonGroup group = new ButtonGroup();
    group.add(jrbBlue);
    group.add(jrbPurplish);
    group.add(jrbRed);
    group.add(jrbYellow);
    group.add(jrbGreen);
    group.add(jrbOrange);
    group.add(jrbCyan);
    group.add(jrbCoral);
    group.add(jrbFuscia);
    group.add(jrbViolet);
    group.add(jrbDodgerBlue);
    group.add(jrbGrey);
    group.add(jrbWhite);
    group.add(jrbCrimson);
    group.add(jrbDarkOrchid);
    group.add(jrbFirebrick);
    group.add(jrbHotPink);
    group.add(jrbMaroon);
    group.add(jrbDarkBlue);
    group.add(jrbTurquoise);

    //jrbBlue.setSelected(true);
    //jlblMessage.setForeground(Color.decode("#0000FF"));

    //----  Action Listener
    jrbBlue.addActionListener(new ActionListener()  {   //<---- How to Reference whichever button is selected?
        @Override
        public void actionPerformed(ActionEvent e)  {
            jlblMessage.setForeground(Color.decode("#000000"));
            jlblMessage.setText(hashMap.get((JRadioButton)e.getSource()));
            getContentPane().setBackground(Color.decode(hashMap.get((JRadioButton)e.getSource())));
        }
    });

}

public static void main(String[] args)  {
    Colors frame = new Colors();
    frame.pack();
    frame.setTitle("Colors");
    frame.setLocationRelativeTo(null);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true); 
    frame.setSize(900,300);

    //----  Color library map
    hashMap.put(jrbBlue, "#0000FF");
    hashMap.put(jrbPurplish, "#DF01D7");
    hashMap.put(jrbRed, "#FF0000");
    hashMap.put(jrbYellow, "#FFFF00");
    hashMap.put(jrbGreen, "#00FF00");
    hashMap.put(jrbOrange, "#FF8C00");
    hashMap.put(jrbCyan, "#00FFFF");
    hashMap.put(jrbCoral, "#FF7F50");
    hashMap.put(jrbFuscia, "#FF00FF");
    hashMap.put(jrbViolet, "#00FF00");
    hashMap.put(jrbDodgerBlue, "#1E90FF");
    hashMap.put(jrbGrey, "#C0C0C0");
    hashMap.put(jrbWhite, "#FFFFFF");
    hashMap.put(jrbCrimson, "#DC143C");
    hashMap.put(jrbDarkOrchid, "#9932CC");
    hashMap.put(jrbFirebrick, "#B22222");
    hashMap.put(jrbHotPink, "#FF69B4");
    hashMap.put(jrbDarkBlue, "#00008B");
    hashMap.put(jrbMaroon, "#800000");
    hashMap.put(jrbTurquoise, "#48D1CC");
}
}
4

1 に答える 1

0

単一のアクション リスナーを作成し、必要なすべてのラジオ ボタンに追加します。次に、actionPerformed(ActionEvent e) 内で、e.getSource() を呼び出すことができます。これにより、対応する JRadioButton が返されるため、キャストして使用できます。アクション リスナー内に変数をハードコーディングする必要はありません。

于 2013-05-08T08:48:35.613 に答える