Java swing - часто меняющийся цвет рамки - PullRequest
1 голос
/ 07 апреля 2019

У меня проблема с изменением цвета рамки.Я создал таймер timer1 и изначально установил цвет рамки, например, co1_ (RED).Теперь, когда я пытался сравнить фактический цвет с предопределенными значениями, я всегда получаю сообщение:

Цвет кадра: javax.swing.plaf.ColorUIResource [r = 238, g = 238, b.= 238]

, а цвет рамки все еще остается красным.Есть ли у вас какие-либо понятия, что я делаю не так?:)

Заранее спасибо.

    Color col1 = Color.RED;
    Color col1_= new Color(255,0,0);
    Color col2 = Color.GREEN;
    Color col2_ = new Color(238,238,238);

    JFrame jfrmForm = new JFrame();
    jfrmForm.setSize(400, 300);
    jfrmForm.setLocation(300,300); 
    jfrmForm.setVisible(rootPaneCheckingEnabled);
    jfrmForm.getContentPane().setBackground(col1_);                      

    //getting color from Frame
    Color c = getContentPane().getBackground();       

    timer.start(); 
    timer.setRepeats(false);

    Timer timer1 = new Timer(1000*frekvCmbBox, new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            if (c.equals(col1_)) {
                jfrmForm.getContentPane().setBackground(col2_);
                System.out.println("Frame color is_: " + c.toString());
            }
            else {
                jfrmForm.getContentPane().setBackground(col1_);
                System.out.println("Frame color is: " + c.toString());
            }                 
        }
    });

    timer1.start();

Ответы [ 2 ]

1 голос
/ 07 апреля 2019

Вы можете отслеживать цвет, не проверяя, какой цвет в настоящее время применяется к фону:

import java.awt.Color;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.Timer;
import javax.swing.border.Border;

public class SwingMain {

    private static Color[] colors = {Color.ORANGE, Color.YELLOW, Color.PINK, Color.CYAN};
    private static int counter = 0;
    public static void main(String[] args) {

        JFrame jfrmForm = new JFrame();
        jfrmForm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jfrmForm.setLocationRelativeTo(null);
        jfrmForm.getContentPane().setBackground(colors[counter++]);
        //add some content
        JLabel label = new JLabel("Background color chaging test");
        Border padding = BorderFactory.createEmptyBorder(10, 10, 10, 10);
        label.setBorder(padding);
        jfrmForm.add(label);
        jfrmForm.pack();

        Timer timer = new Timer(1000, ae -> {

            jfrmForm.getContentPane().setBackground(colors[counter++]);
            if (counter >= colors.length) {
                counter = 0;
            }
        });

        timer.start();
        jfrmForm.setVisible(true);
    }
}

enter image description here

1 голос
/ 07 апреля 2019

Андрей, спасибо за помощь - сейчас работает!

Moving Color c = getContentPane().getBackground(); 

чтобы внутри выполненного действия был метод ключа. И я прошу прощения за ответ - похоже, я не внимательно прочитал правила форума.

...