【问题标题】:How to change the color of a JButton when the name of the JButton I want to color is in a string?当我要着色的 JButton 的名称在字符串中时,如何更改 JButton 的颜色?
【发布时间】:2015-03-01 04:54:04
【问题描述】:

我设置了随机数方法和随机颜色方法。我有 28 个按钮,它们都被命名为 button_number。随机数选择按钮。我有一些基本代码显然不起作用,因为我无法更改字符串的背景,但我不知道从这里去哪里。

static Random random = new Random();
static int rand1 = RandomRange.showRandomInteger(1, 28, random);
static String num = Integer.toString(rand1);
static String button = ("button_" + num);

button.setBackground(randomColor());

其他类

public class TestFrame extends JFrame {

private JPanel contentPane;

/**
 * Launch the application.
 */
public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
        public void run() {
            try {
                TestFrame frame = new TestFrame();
                frame.setVisible(true);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
}

/**
 * Create the frame.
 */
public TestFrame() {
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setBounds(100, 100, 450, 300);
    contentPane = new JPanel();
    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
    contentPane.setLayout(new BorderLayout(0, 0));
    setContentPane(contentPane);

    JLayeredPane layeredPane = new JLayeredPane();
    contentPane.add(layeredPane, BorderLayout.CENTER);

    JButton btnTick = new JButton("Tick");
    btnTick.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
        }
    });
    btnTick.setBounds(281, 217, 133, 23);
    layeredPane.add(btnTick);

    JButton btnStart = new JButton("Start");
    btnStart.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
        }
    });
    btnStart.setBounds(10, 217, 133, 23);
    layeredPane.add(btnStart);


    JButton button_27 = new JButton("");
    button_27.setBounds(0, 0, 45, 45);
    layeredPane.add(button_27);

    JButton button_28 = new JButton("");
    button_28.setBackground(Color.RED);
    button_28.setBounds(45, 0, 45, 45);
    layeredPane.add(button_28);

    JButton button_1 = new JButton("");
    button_1.setBounds(90, 0, 45, 45);
    layeredPane.add(button_1);

    JButton button_2 = new JButton("");
    button_2.setBounds(135, 0, 45, 45);
    layeredPane.add(button_2);

    JButton button_3 = new JButton("");
    button_3.setBounds(180, 0, 45, 45);
    layeredPane.add(button_3);

    JButton button_4 = new JButton("");
    button_4.setBounds(225, 0, 45, 45);
    layeredPane.add(button_4);

    JButton button_5 = new JButton("");
    button_5.setBounds(270, 0, 45, 45);
    layeredPane.add(button_5);

    JButton button_6 = new JButton("");
    button_6.setBounds(270, 45, 45, 45);
    layeredPane.add(button_6);

    JButton button_7 = new JButton("");
    button_7.setBounds(0, 45, 45, 45);
    layeredPane.add(button_7);

    JButton button_8 = new JButton("");
    button_8.setBounds(225, 45, 45, 45);
    layeredPane.add(button_8);

    JButton button_9 = new JButton("");
    button_9.setBounds(45, 45, 45, 45);
    layeredPane.add(button_9);

    JButton button_10 = new JButton("");
    button_10.setBounds(90, 45, 45, 45);
    layeredPane.add(button_10);

    JButton button_11 = new JButton("");
    button_11.setBounds(135, 45, 45, 45);
    layeredPane.add(button_11);

    JButton button_12 = new JButton("");
    button_12.setBounds(180, 45, 45, 45);
    layeredPane.add(button_12);

    JButton button_13 = new JButton("");
    button_13.setBounds(0, 135, 45, 45);
    layeredPane.add(button_13);

    JButton button_14 = new JButton("");
    button_14.setBounds(0, 90, 45, 45);
    layeredPane.add(button_14);

    JButton button_15 = new JButton("");
    button_15.setBounds(45, 90, 45, 45);
    layeredPane.add(button_15);

    JButton button_16 = new JButton("");
    button_16.setBounds(45, 135, 45, 45);
    layeredPane.add(button_16);

    JButton button_17 = new JButton("");
    button_17.setBounds(90, 135, 45, 45);
    layeredPane.add(button_17);

    JButton button_18 = new JButton("");
    button_18.setBounds(90, 90, 45, 45);
    layeredPane.add(button_18);

    JButton button_19 = new JButton("");
    button_19.setBounds(135, 90, 45, 45);
    layeredPane.add(button_19);

    JButton button_20 = new JButton("");
    button_20.setBounds(135, 135, 45, 45);
    layeredPane.add(button_20);

    JButton button_21 = new JButton("");
    button_21.setBounds(180, 135, 45, 45);
    layeredPane.add(button_21);

    JButton button_22 = new JButton("");
    button_22.setBounds(180, 90, 45, 45);
    layeredPane.add(button_22);

    JButton button_23 = new JButton("");
    button_23.setBounds(225, 90, 45, 45);
    layeredPane.add(button_23);

    JButton button_24 = new JButton("");
    button_24.setBounds(225, 135, 45, 45);
    layeredPane.add(button_24);

    JButton button_25 = new JButton("");
    button_25.setBounds(270, 135, 45, 45);
    layeredPane.add(button_25);

    JButton button_26 = new JButton("");
    button_26.setBounds(270, 90, 45, 45);
    layeredPane.add(button_26);

    final JButton[] BUTTONS = {button_1,button_2,button_3,button_4,button_5,button_6,button_7,
            button_8,button_9,button_10,button_11,button_12,button_13,button_14,button_15,
            button_16,button_17,button_18,button_19,button_20,button_21,button_22,button_23,
            button_24,button_25,button_26,button_27,button_28};



    JLabel label = new JLabel("Blue:");
    label.setBounds(325, 11, 89, 14);
    layeredPane.add(label);

    JLabel label_1 = new JLabel("Yellow:");
    label_1.setBounds(325, 36, 89, 14);
    layeredPane.add(label_1);

    JLabel label_2 = new JLabel("Red:");
    label_2.setBounds(325, 61, 89, 14);
    layeredPane.add(label_2);
}

}

【问题讨论】:

  • 这是一个 Java 问题吗?我想你需要提供更多细节和代码才能得到答案。
  • 不要使用空布局,你无法控制在不同系统上渲染时会改变组件大小的方面

标签: java string user-interface methods jbutton


【解决方案1】:

按钮的名称是按钮的标签。将您的按钮保存在一个集合中。遍历集合以将按钮的 .getName () 与您的字符串匹配。然后调用按钮的 setBackgroundColor 改变按钮颜色。

【讨论】:

  • 如何从 GUI 类(添加到问题)中获取 JButton[] 到我的刻度类中?(已显示)
  • @toxicswagger1 我会以编程方式计算按钮的边界。我会做一个特殊的按钮类。由于您直接在代码中一一创建(实例化)按钮,因此您可以为它们提供与数字相对应的标签(以及名称)。您还可以将它们一一添加到您自己制作的数组或集合中,而无需尝试将此类数组从 GUI 中拉出。
【解决方案2】:

将颜色代码作为字符串传递,就像红色一样使用:button.setBackgroundColor(Color.parseColor("#ff0000")); 或者 button.setBackground(Color.parseColor("#ff0000"));

【讨论】:

    【解决方案3】:

    将所有按钮放入一个数组或List。计算随机数时,在列表/数组中查找按钮并更改其 Color 属性

    【讨论】:

    • 是的,我刚刚这样做了(问题已更新),但我不知道如何将数组带到其他班级。
    • 您要么需要将数组的引用传递给另一个类,这可能不是一个好主意,要么将随机值/颜色传递回包含数组的类...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-11
    • 1970-01-01
    • 2015-12-12
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 2015-05-29
    相关资源
    最近更新 更多