简体   繁体   English

我有 4 个不同的 JLabels 和两个按钮,一个按钮应该将颜色向右更改为蓝色,另一个按钮将颜色更改回来

[英]I have 4 different JLabels and two buttons one button should change the color to the right to blue and the other button changes the color back

I am trying to make it so on a button click (actionEvent) the color changes the label to blue.我试图通过单击按钮(actionEvent)来实现它,颜色将 label 更改为蓝色。 I have four different labels and two buttons.我有四个不同的标签和两个按钮。 if the button with the arrow to the right is clicked then the label to the right changes from orange to blue and so on if the button is clicked again.如果单击带有右侧箭头的按钮,则如果再次单击该按钮,则右侧的 label 将从橙色变为蓝色,依此类推。 If the button to the left is clicked then the label to the left changes from orange to blue and so on if clicked again.如果单击左侧的按钮,则再次单击左侧的 label 将从橙色变为蓝色,依此类推。 I don't know if I am doing something wrong in the action listeners, but when the buttons are clicked nothing happens.I will post the assignment instructions below this paragraph, so hopefully it makes more sense.我不知道我是否在动作侦听器中做错了什么,但是当单击按钮时没有任何反应。我将在本段下方发布分配说明,因此希望它更有意义。

In this lab, you will create a GUI that looks similar to the image below.在本实验中,您将创建一个类似于下图的 GUI。 On the left, you have a control panel that includes two buttons: one with a left-arrow and one with a right-arrow.在左侧,您有一个包含两个按钮的控制面板:一个带有左箭头,一个带有右箭头。 Whenever you click the right arrow, the blue tile moves to the right (the numbers remain unchanged) Whenever you click the left arrow, the blue tile moves to the left.每当您单击右箭头时,蓝色瓷砖就会向右移动(数字保持不变) 每当您单击向左箭头时,蓝色瓷砖就会向左移动。 If the blue tile is on position 1 and the left arrow is clicked, the blue tile is moved to the very right (position 4) Something analogous is true for the right arrow.如果蓝色方块在 position 1 上并单击左箭头,则蓝色方块移动到最右侧(位置 4) 右箭头类似。

Desired Output:所需的 Output:

package guiLayout;

/**
 * In this JFrame my goal is to be able to make the color of the labels
 * change on the JButton click with an action listener.
 * 
 * @author Kody Berry
 * @since 7-4-2020
 */

import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JLabel;
import javax.swing.SwingConstants;
import java.awt.Color;
import javax.swing.JButton;
import java.awt.Font;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class LabGuiLayout extends JFrame {
// Fields
private static final long serialVersionUID = 1L;
private JPanel contentPane;

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

/**
 * Create the frame.
 */
public LabGuiLayout() {
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setBounds(100, 100, 500, 200);
    contentPane = new JPanel();
    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
    setContentPane(contentPane);
    contentPane.setLayout(null);

    // Creating instances of methods and adding it to JPannel.
    JButton btnNewButton = moveLeftButton();
    contentPane.add(btnNewButton);

    JLabel lblNewLabel = labelOne();
    contentPane.add(lblNewLabel);

    JLabel lblNewLabel_1 = labelTwo();
    contentPane.add(lblNewLabel_1);

    JLabel lblNewLabel_2 = labelThree();
    contentPane.add(lblNewLabel_2);

    JButton button = moveRightButton();
    contentPane.add(button);

    JLabel label = labelFour();
    contentPane.add(label);

    JLabel lblNewLabel_3 = demoLayoutLabel();
    contentPane.add(lblNewLabel_3);
}

/**
 * Title Label.
 * 
 * @return Returns lblNewLabel_3.
 */
private JLabel demoLayoutLabel() {
    JLabel lblNewLabel_3 = new JLabel("Demo Layout");
    lblNewLabel_3.setFont(new Font("Tahoma", Font.PLAIN, 23));
    lblNewLabel_3.setHorizontalAlignment(SwingConstants.CENTER);
    lblNewLabel_3.setOpaque(true);
    lblNewLabel_3.setBounds(0, 0, 490, 46);
    return lblNewLabel_3;
}

/**
 * Number 1 label.
 * 
 * @return Returns lblNewLabel.
 */
private JLabel labelOne() {
    JLabel lblNewLabel = new JLabel(" 1");
    lblNewLabel.setFont(new Font("Tahoma", Font.PLAIN, 26));
    lblNewLabel.setOpaque(true);
    lblNewLabel.setBounds(91, 45, 86, 93);
    lblNewLabel.setBackground(Color.BLUE);
    lblNewLabel.setHorizontalAlignment(SwingConstants.CENTER);
    return lblNewLabel;
}

/**
 * Number 2 label.
 * 
 * @return Returns lblNewLabel_1.
 */
private JLabel labelTwo() {
    JLabel lblNewLabel_1 = new JLabel("2");
    lblNewLabel_1.setFont(new Font("Tahoma", Font.PLAIN, 26));
    lblNewLabel_1.setOpaque(true);
    lblNewLabel_1.setBounds(187, 45, 86, 93);
    lblNewLabel_1.setBackground(Color.ORANGE);
    lblNewLabel_1.setHorizontalAlignment(SwingConstants.CENTER);
    return lblNewLabel_1;
}

/**
 * Number 3 label.
 * 
 * @return Returns lblNewLabel_2.
 */
private JLabel labelThree() {
    JLabel lblNewLabel_2 = new JLabel("3");
    lblNewLabel_2.setFont(new Font("Tahoma", Font.PLAIN, 26));
    lblNewLabel_2.setOpaque(true);
    lblNewLabel_2.setBounds(283, 45, 86, 93);
    lblNewLabel_2.setBackground(Color.ORANGE);
    lblNewLabel_2.setHorizontalAlignment(SwingConstants.CENTER);
    return lblNewLabel_2;
}

/**
 * Number 4 label.
 * 
 * @return Returns label.
 */
private JLabel labelFour() {
    JLabel label = new JLabel("4");
    label.setFont(new Font("Tahoma", Font.PLAIN, 26));
    label.setOpaque(true);
    label.setHorizontalAlignment(SwingConstants.CENTER);
    label.setBackground(Color.ORANGE);
    label.setBounds(379, 45, 86, 93);
    return label;
}

/**
 * Move to the left button that when clicked will change the button to the left
 * to blue and the previous button to orange. Once the last label on the left is
 * blue if the button is clicked again it will start over.
 * 
 * @return Returns btnNewButton.
 */
private JButton moveLeftButton() {

    // Array of labels.
    JLabel[] jl = { labelOne(), labelTwo(), labelThree(), labelFour() };

    JButton btnNewButton = new JButton("<--");

    btnNewButton.addActionListener(new ActionListener() {
        int clicks = 0;

        public void actionPerformed(ActionEvent e) {
            switch (++clicks) {
            case 1:
                jl[0].setBackground(Color.ORANGE);
                jl[3].setBackground(Color.BLUE);
                break;
            case 2:
                jl[3].setBackground(Color.ORANGE);
                jl[2].setBackground(Color.BLUE);
                break;
            case 3:
                jl[2].setBackground(Color.ORANGE);
                jl[1].setBackground(Color.BLUE);
                break;
            case 4:
                jl[1].setBackground(Color.BLUE);
                jl[0].setBackground(Color.ORANGE);
                break;
            default:
                clicks = 1;
                break;
            }

        }
    });
    btnNewButton.setBounds(32, 45, 49, 23);
    return btnNewButton;
}

/**
 * Move to the right button that when clicked will change the button to the
 * right to blue and the previous button to orange. Once the last label on the
 * right is blue if the button is clicked again it will start over.
 * 
 * @return Returns button.
 */
private JButton moveRightButton() {

    // Array of labels.
    JLabel[] jl = { labelOne(), labelTwo(), labelThree(), labelFour() };

    JButton button = new JButton("-->");

    button.addActionListener(new ActionListener() {
        int clicks = 0;

        public void actionPerformed(ActionEvent e) {
            switch (++clicks) {
            case 1:
                jl[0].setBackground(Color.ORANGE);
                jl[1].setBackground(Color.BLUE);
                break;
            case 2:
                jl[1].setBackground(Color.ORANGE);
                jl[2].setBackground(Color.BLUE);
                break;
            case 3:
                jl[2].setBackground(Color.ORANGE);
                jl[3].setBackground(Color.BLUE);
                break;
            case 4:
                jl[0].setBackground(Color.BLUE);
                jl[1].setBackground(Color.ORANGE);
                break;
            default:
                clicks = 1;
                break;
            }
        }
    });
    button.setBounds(32, 79, 49, 23);
    return button;
}

} }

JLabel lblNewLabel = labelOne();
contentPane.add(lblNewLabel);

You create and add a label to the frame.您创建 label 并将其添加到框架。

But then in the ActionListener you have:但是在 ActionListener 你有:

JLabel[] jl = { labelOne(), labelTwo(), labelThree(), labelFour() };

which creates 4 new instances of each label.它为每个 label 创建 4 个新实例。 These labels are not added to the frame, so changing their background does nothing.这些标签不会添加到框架中,因此更改它们的背景没有任何作用。

Instead you need to define your Array as an instance variable of the class.相反,您需要将 Array 定义为 class 的实例变量。 Then your ActionListener can access the label from the Array.然后您的 ActionListener 可以从 Array 访问 label。

So in the constructor when you create and add the label to the frame you also need to add it to the Array.因此,在构造函数中,当您创建 label 并将其添加到框架时,您还需要将其添加到数组中。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 后退按钮颜色变化 - back button color change 如何在Button上使用ActionListener来更改其他类中的JLabel? - How would I use an ActionListener on a Button to change JLabels in a different class? 如何更改单击的按钮的颜色,但使其只能同时更改一个按钮的颜色? - How can I change the color of a button that is clicked but make it so that only one buttons' color can be changed at the same time? 我有三个开关按钮,如果一个开关按钮处于活动状态,则其他两个开关按钮应保持不活动或禁用 - I have three switch button, if one switch button is active then other two switch button should remain inactive or disable 两个按钮将面板颜色更改为红色或蓝色 - Two buttons changing panel color to red or blue 更改按钮数组中按钮的颜色并将其他按钮恢复为默认值 - Changing color of a button in an array of buttons and return the other buttons to default 使用instanceof更改JLabels的颜色 - Using instanceof to change color of JLabels 在Gridview按钮项目上单击,按钮项目的文本颜色应更改 - Onclick of Gridview button item, Text Color of button item should change 一键更改多个 JPanel 的颜色 - Using one button to change the color of multiple JPanels 更改<Button>onClick的颜色?</button> - Change <Button> color onClick?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM