guijlabel在Java中的实践
我试图“点亮”一个jlabel列表,就好像它是一串灯光一样。无论如何,我有一个简单的gui,它有一个JPanel,它是一个JLabel的数组。我一直在使用计时器,将背景颜色从黑色改为绿色,使其看起来像“亮起”。我已经找到了向上点亮它们的代码,但向下点亮它们似乎是个问题 迄今为止的工作守则:guijlabel在Java中的实践,java,swing,user-interface,jpanel,jlabel,Java,Swing,User Interface,Jpanel,Jlabel,我试图“点亮”一个jlabel列表,就好像它是一串灯光一样。无论如何,我有一个简单的gui,它有一个JPanel,它是一个JLabel的数组。我一直在使用计时器,将背景颜色从黑色改为绿色,使其看起来像“亮起”。我已经找到了向上点亮它们的代码,但向下点亮它们似乎是个问题 迄今为止的工作守则: this.timer = new Timer(100, new ActionListener() { private int sequence = 0; public
this.timer = new Timer(100, new ActionListener() {
private int sequence = 0;
public void actionPerformed(ActionEvent evt) {
if (sequence % 2 == 0) {
labels[1].setBackground(Color.black);
labels[3].setBackground(Color.black);
labels[5].setBackground(Color.black);
labels[7].setBackground(Color.black);
labels[sequence].setBackground(Color.green);
sequence++;
} else if (sequence % 2 != 0) {
labels[0].setBackground(Color.black);
labels[2].setBackground(Color.black);
labels[4].setBackground(Color.black);
labels[6].setBackground(Color.black);
labels[sequence].setBackground(Color.green);
sequence++;
}
if (sequence > 7) {
sequence = 0;
}
}
});
this.timer.start();
}
我将使用一个count变量来迭代我的数组或集合,并将索引标签右侧的标签设置为背景色,将索引标签设置为活动颜色,然后推进索引。例如:
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
@SuppressWarnings("serial")
public class LarsonScanner extends JPanel {
private static final int PANEL_COUNT = 50;
private static final int TIMER_DELAY = 30;
private static final Color BACKGROUND = Color.BLACK;
private static final Color ACTIVE_COLOR = Color.GREEN;
private static final Color PARTIAL_COLOR = new Color(0, 90, 0);
private static final Dimension RIGID_AREA = new Dimension(14, 1);
private JPanel[] panels = new JPanel[PANEL_COUNT];
public LarsonScanner() {
setLayout(new GridLayout(1, 0));
for (int i = 0; i < panels.length; i++) {
panels[i] = new JPanel();
panels[i].add(Box.createRigidArea(RIGID_AREA));
panels[i].setBackground(BACKGROUND);
add(panels[i]);
}
new Timer(TIMER_DELAY, new TimerListener()).start();
}
private class TimerListener implements ActionListener {
private int count = 0;
@Override
public void actionPerformed(ActionEvent e) {
int index = (count - 2 + panels.length) % panels.length;
panels[index].setBackground(BACKGROUND);
int prior = (count - 1 + panels.length) % panels.length;
int next = (count + 1) % panels.length;
panels[count].setBackground(ACTIVE_COLOR);
panels[prior].setBackground(PARTIAL_COLOR);
panels[next].setBackground(PARTIAL_COLOR);
count++;
count %= panels.length;
}
}
private static void createAndShowGui() {
LarsonScanner mainPanel = new LarsonScanner();
JFrame frame = new JFrame("LarsonScanner");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(mainPanel);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGui();
}
});
}
}
导入java.awt.Color;
导入java.awt.Dimension;
导入java.awt.GridLayout;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入javax.swing.*;
@抑制警告(“串行”)
公共类LarsonScanner扩展了JPanel{
专用静态最终int面板计数=50;
专用静态最终int定时器_延迟=30;
私有静态最终颜色背景=Color.BLACK;
私有静态最终颜色活动\u颜色=Color.GREEN;
私有静态最终颜色局部颜色=新颜色(0,90,0);
专用静态最终尺寸刚性_面积=新尺寸(14,1);
私有JPanel[]面板=新JPanel[PANEL_COUNT];
公共拉森斯坎纳(){
setLayout(新的GridLayout(1,0));
对于(int i=0;i
编辑2
程序的第2次迭代:
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
@SuppressWarnings("serial")
public class LarsonScanner extends JPanel {
private static final int PANEL_COUNT = 40;
private static final int TIMER_DELAY = 20;
private static final Color BACKGROUND = Color.BLACK;
private static final Color ACTIVE_COLOR = Color.GREEN;
private static final Color PARTIAL_COLOR = new Color(0, 90, 0);
private static final Dimension RIGID_AREA = new Dimension(14, 1);
private JPanel[] panels = new JPanel[PANEL_COUNT];
public LarsonScanner() {
setLayout(new GridLayout(1, 0));
for (int i = 0; i < panels.length; i++) {
panels[i] = new JPanel();
panels[i].add(Box.createRigidArea(RIGID_AREA));
panels[i].setBackground(BACKGROUND);
add(panels[i]);
}
new Timer(TIMER_DELAY, new TimerListener()).start();
}
private class TimerListener implements ActionListener {
private int count = 0;
private boolean goingRight = true;
@Override
public void actionPerformed(ActionEvent e) {
if (goingRight) {
int index = (count - 2 + panels.length) % panels.length;
panels[index].setBackground(BACKGROUND);
int prior = Math.max((count - 1) % panels.length, 0);
int next = Math.min(count + 1, panels.length - 1);
panels[prior].setBackground(PARTIAL_COLOR);
panels[next].setBackground(PARTIAL_COLOR);
panels[count].setBackground(ACTIVE_COLOR);
count++;
if (count == panels.length) {
count--;
goingRight = false;
}
} else {
int index = (count + 2) % panels.length;
panels[index].setBackground(BACKGROUND);
int prior = Math.max((count - 1) % panels.length, 0);
int next = Math.min(count + 1, panels.length - 1);
panels[prior].setBackground(PARTIAL_COLOR);
panels[next].setBackground(PARTIAL_COLOR);
panels[count].setBackground(ACTIVE_COLOR);
count--;
if (count == -1) {
count++;
goingRight = true;
}
}
}
}
private static void createAndShowGui() {
LarsonScanner mainPanel = new LarsonScanner();
JFrame frame = new JFrame("LarsonScanner");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(mainPanel);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGui();
}
});
}
}
导入java.awt.Color;
导入java.awt.Dimension;
导入java.awt.GridLayout;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入javax.swing.*;
@抑制警告(“串行”)
公共类LarsonScanner扩展了JPanel{
专用静态最终int面板计数=40;
专用静态最终int定时器_延迟=20;
私有静态最终颜色背景=Color.BLACK;
私有静态最终颜色活动\u颜色=Color.GREEN;
私有静态最终颜色局部颜色=新颜色(0,90,0);
专用静态最终尺寸刚性_面积=新尺寸(14,1);
私有JPanel[]面板=新JPanel[PANEL_COUNT];
公共拉森斯坎纳(){
setLayout(新的GridLayout(1,0));
对于(int i=0;i
我将使用一个计数变量来迭代我的数组或集合,并将索引标签右侧的标签设置为背景色,将索引标签设置为活动颜色,然后推进索引。例如:
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
@SuppressWarnings("serial")
public class LarsonScanner extends JPanel {
private static final int PANEL_COUNT = 50;
private static final int TIMER_DELAY = 30;
private static final Color BACKGROUND = Color.BLACK;
private static final Color ACTIVE_COLOR = Color.GREEN;
private static final Color PARTIAL_COLOR = new Color(0, 90, 0);
private static final Dimension RIGID_AREA = new Dimension(14, 1);
private JPanel[] panels = new JPanel[PANEL_COUNT];
public LarsonScanner() {
setLayout(new GridLayout(1, 0));
for (int i = 0; i < panels.length; i++) {
panels[i] = new JPanel();
panels[i].add(Box.createRigidArea(RIGID_AREA));
panels[i].setBackground(BACKGROUND);
add(panels[i]);
}
new Timer(TIMER_DELAY, new TimerListener()).start();
}
private class TimerListener implements ActionListener {
private int count = 0;
@Override
public void actionPerformed(ActionEvent e) {
int index = (count - 2 + panels.length) % panels.length;
panels[index].setBackground(BACKGROUND);
int prior = (count - 1 + panels.length) % panels.length;
int next = (count + 1) % panels.length;
panels[count].setBackground(ACTIVE_COLOR);
panels[prior].setBackground(PARTIAL_COLOR);
panels[next].setBackground(PARTIAL_COLOR);
count++;
count %= panels.length;
}
}
private static void createAndShowGui() {
LarsonScanner mainPanel = new LarsonScanner();
JFrame frame = new JFrame("LarsonScanner");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(mainPanel);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGui();
}
});
}
}
package com.ggl.larson.scanner;
import java.awt.Dimension;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
public class TesterFrame implements Runnable {
@Override
public void run() {
JFrame frame = new JFrame("Larson Scanner");
LarsonScanner scanner = new LarsonScanner();
scanner.setSegmentCount(12);
scanner.setDisplayInterval(100L);
frame.add(scanner);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(new Dimension(600, 100));
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new TesterFrame());
}
}