- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我之前的代码遇到了一些问题。它正在做我想做的事情,但我只能调用该方法一次,如果调用次数超过该方法,它将不起作用,本质上它只能起作用一次。所以现在这个 ballG 是一个对象。它一开始是白色的,然后将其设置为绿色,有一个延迟,然后将其设置回白色,这是完美的。问题是因为我做了timerG.start();我没有结束它,当我再次调用它时它不起作用。如果我做timerG.stop();它忽略 Action 事件并将其保留为绿色而不返回到白色。我怎样才能多次调用这个方法???
import java.awt.BorderLayout;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JTextField;
import javax.swing.JButton;
import javax.swing.JTextArea;
import javax.swing.Timer;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.JTextPane;
import javax.swing.JLabel;
import java.awt.Color;
import java.awt.Font;
import java.util.concurrent.TimeUnit;
import javax.swing.JLayeredPane;
import javax.swing.JEditorPane;
public class frame extends JFrame {
private JPanel contentPane;
private JTextField textEntered;
private JTextArea displayT;
private JTextPane textPane;
private JLabel instructions;
private JLabel instructions3;
private JLabel instructions2;
private JLabel ballR;
private JLabel ballG;
private JLabel ballB;
private JPanel panel;
private JTextArea textArea;
private JLabel instructions4;
public String translator(String x)
{
String y = "";
for(int i = 0; i< x.length(); i++)
{
y = y + code(x.charAt(i)) + " ";
}
return y;
}
private String code(char a)
{
switch (a) {
case 'e' : return "R";
case 't' : return "B";
case 'a' : return "G";
case 'o' : return "RB";
case 'i' : return "RG";
case 'n': return "BG";
case 's' : return "R-R";
case 'h' : return "R-B";
case 'r' : return "R-G";
case 'd' : return "R-RB";
case 'l' : return "R-RG";
case 'c' : return "R-BG";
case 'u' : return "B-R";
case 'm' : return "B-B";
case 'w' : return "B-G";
case 'f' : return "B-RB";
case 'g' : return "B-RG";
case 'y' : return "B-BG";
case 'p' : return "G-R";
case 'b' : return "G-B";
case 'v': return "G-B";
case 'k' : return "G-RB";
case 'j' : return "G-RG";
case 'x' : return "G-BG";
case 'q' : return "RB-R";
case 'z' : return "RB-G";
case ' ' : return "RB-B";
case '0' : return "RB-RB";
case '1' : return "RB-RG";
case '2' : return"RB-BG";
case '3' : return "RG-R";
case '4' :return "RG-B";
case '5' : return "RG-G";
case '6' : return "RG-RB";
case '7' : return "RG-RG";
case '8' : return "RG-BG";
case '9' : return "BG-R";
}
return "Z";
}
//Trying to get 1/4 of these methods to work, colorRed, colrGreen, colorBlue,setWhite
private void colorRed()
{
Timer timerR = new Timer(750, new ActionListener(){
@Override
public void actionPerformed(ActionEvent e){
ballR.setForeground(Color.RED);//or RED, depending
}
});
//timer.setRepeats(false);//don't repeat if you don't want to
timerR.start();
ballR.setForeground(Color.WHITE);
}
private void colorGreen()
{
ballG.setForeground(Color.GREEN);
Timer timerG = new Timer(750, new ActionListener(){
@Override
public void actionPerformed(ActionEvent e){
ballG.setForeground(Color.WHITE);//or RED, depending
}
});
timerG.setRepeats(false);
timerG.start();
}
private void colorBlue()
{
Timer timerB = new Timer(750, new ActionListener(){
@Override
public void actionPerformed(ActionEvent e){
ballB.setForeground(Color.BLUE);//or RED, depending
}
});
//timer.setRepeats(false);
timerB.start();
ballR.setForeground(Color.WHITE);
}
private void setWhite()
{
Timer timer = new Timer(750, new ActionListener(){
@Override
public void actionPerformed(ActionEvent e){
ballB.setForeground(Color.WHITE);
ballR.setForeground(Color.WHITE);
ballG.setForeground(Color.WHITE);
}
});
//timer.setRepeats(false);
timer.start();
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
frame frame = new frame();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
public frame() {
setTitle("RBG Translator");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 800, 529);
contentPane = new JPanel();
contentPane.setBackground(Color.GRAY);
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
textEntered = new JTextField();
textEntered.setText("Enter String...");
textEntered.setBounds(10, 124, 261, 50);
contentPane.add(textEntered);
textEntered.setColumns(10);
JButton submit = new JButton("Submit");
submit.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
ballR.setForeground(Color.WHITE);
ballB.setForeground(Color.WHITE);
ballG.setForeground(Color.WHITE);
String input = textEntered.getText().toLowerCase();
String output = translator(input);
displayT.setText(output);
//colorRed();
colorGreen();
//colorRed();
//colorBlue();
colorGreen();
colorGreen();
}
});
submit.setBounds(281, 125, 138, 50);
contentPane.add(submit);
displayT = new JTextArea();
displayT.setBounds(10, 246, 409, 234);
displayT.setLineWrap(true);
contentPane.add(displayT);
instructions = new JLabel("Please enter a word or a phrase that you would like to be transalted\r\n");
instructions.setBounds(10, 11, 396, 14);
contentPane.add(instructions);
instructions3 = new JLabel("Below is a translated text of the word or phrase submitted");
instructions3.setBounds(10, 205, 409, 34);
contentPane.add(instructions3);
instructions2 = new JLabel("into RBG code. Currently A-Z, 0-9, and space are permitted.");
instructions2.setBounds(10, 24, 396, 34);
contentPane.add(instructions2);
panel = new JPanel();
panel.setBounds(470, 25, 304, 169);
contentPane.add(panel);
ballR = new JLabel("\u2022");
panel.add(ballR);
ballR.setForeground(Color.RED);
ballR.setFont(new Font("Tahoma", Font.PLAIN, 99));
ballB = new JLabel("\u2022");
panel.add(ballB);
ballB.setForeground(Color.BLUE);
ballB.setFont(new Font("Tahoma", Font.PLAIN, 99));
ballG = new JLabel("\u2022");
panel.add(ballG);
ballG.setForeground(Color.GREEN);
ballG.setFont(new Font("Tahoma", Font.PLAIN, 99));
textArea = new JTextArea();
textArea.setLineWrap(true);
textArea.setColumns(4);
textArea.setText("a:G k:G-RB u:B-R 4:RG-B "
+ "b:G-B l:R-RG v:G-G 5:RG-G "
+ "c:R-BG m:B-B w:B-G 6:RG-RB "
+ "d:R-RB n:BG x:G-BG 7:RG-RG "
+ "e:R o:RB y:B-BG 8:RG-BG "
+ "f:B-RB p:G-R z:RB-G 9:BG-R "
+ "g:B-RG q:RB-R 0:RB-RB :RB-B "
+ "h:R-B r:R-G 1:RB-RG "
+ "i:RG s:R-R 2:RB-BG "
+ "j:G-RG t:B 3:RG-R " );
textArea.setBounds(429, 246, 345, 234);
contentPane.add(textArea);
instructions4 = new JLabel("Key\r\n");
instructions4.setBounds(429, 205, 345, 34);
contentPane.add(instructions4);
}
}
最佳答案
(我真的不知道你的“代码”在做什么,因为R-RB
似乎没有意义,你如何显示R,G和B?)
好的,您需要首先生成某种想要显示的序列。这将允许 Timer
充当伪循环并根据当前序列集更新 UI
private String[] sequence;
private int index;
private Timer timer;
//...
public Test() {
//...
JButton submit = new JButton("Submit");
submit.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
ballR.setForeground(Color.WHITE);
ballB.setForeground(Color.WHITE);
ballG.setForeground(Color.WHITE);
String input = textEntered.getText().toLowerCase();
String output = translator(input);
displayT.setText(output);
timer.stop();
System.out.println(output);
List<String> firstPass = new ArrayList<>(Arrays.asList(output.split(" ")));
List<String> fullPass = new ArrayList<>(25);
for (String pass : firstPass) {
if (pass.contains("-")) {
String[] parts = pass.split("-");
fullPass.addAll(Arrays.asList(parts));
} else {
fullPass.add(pass);
}
}
sequence = fullPass.toArray(new String[fullPass.size()]);
index = 0;
timer.start();
}
});
基本上,这假设每个空间都是一个单独的要显示的序列
接下来,您需要设置一个可以播放序列的计时器
timer = new Timer(750, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
ballR.setForeground(Color.WHITE);
ballG.setForeground(Color.WHITE);
ballB.setForeground(Color.WHITE);
if (index < sequence.length) {
String set = sequence[index];
System.out.println(index + " = " + set);
for (char c : set.toCharArray()) {
if ('R' == c) {
ballR.setForeground(Color.RED);
} else if ('G' == c) {
ballG.setForeground(Color.GREEN);
} else if ('B' == c) {
ballB.setForeground(Color.BLUE);
}
}
} else {
timer.stop();
}
index++;
}
});
好的,所以,这将获取下一个 String
序列,并将其分解为单独的元素,方法是将 String
吐到 -
字符上(这就是为什么你的“代码”对我来说没有意义)。然后它循环遍历这个集合并相应地改变“球”的状态。
计时器
继续执行,直到没有更多的序列...
避免使用 null
布局,像素完美布局是现代 UI 设计中的一种幻觉。影响组件个体尺寸的因素太多,您无法控制其中任何一个。 Swing 的设计初衷是与布局管理器一起工作,放弃它们将导致无穷无尽的问题,您将花费越来越多的时间来尝试纠正
关于java - 我怎样才能让这个timer()按我想要的方式工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30295117/
我一直在阅读有关汇编函数的内容,但对于是使用进入和退出还是仅使用调用/返回指令来快速执行,我感到很困惑。一种方式快而另一种方式更小吗?例如,在不内联函数的情况下,在汇编中执行此操作的最快(stdcal
我正在处理一个元组列表,如下所示: res = [('stori', 'JJ'), ('man', 'NN'), ('unnatur', 'JJ'), ('feel', 'NN'), ('pig',
最近我一直在做很多网络或 IO 绑定(bind)操作,使用线程有助于加快代码速度。我注意到我一直在一遍又一遍地编写这样的代码: threads = [] for machine, user, data
假设我有一个名为 user_stats 的资源,其中包含用户拥有的帖子、评论、喜欢和关注者的数量。是否有一种 RESTful 方式只询问该统计数据的一部分(即,对于 user_stats/3,请告诉我
我有一个简单的 api,它的工作原理是这样的: 用户创建一个请求 ( POST /requests ) 另一个用户检索所有请求 ( GET /requests ) 然后向请求添加报价 ( POST /
考虑以下 CDK Python 中的示例(对于这个问题,不需要 AWS 知识,这应该对基本上任何构建器模式都有效,我只是在这个示例中使用 CDK,因为我使用这个库遇到了这个问题。): from aws
Scala 中管理对象池的首选方法是什么? 我需要单线程创建和删除大规模对象(不需要同步)。在 C++ 中,我使用了静态对象数组。 在 Scala 中处理它的惯用和有效方法是什么? 最佳答案 我会把它
我有一个带有一些内置方法的类。这是该类的抽象示例: class Foo: def __init__(self): self.a = 0 self.b = 0
返回和检查方法执行的 Pythonic 方式 我目前在 python 代码中使用 golang 编码风格,决定移动 pythonic 方式 例子: import sys from typing imp
我正在开发一个 RESTful API。其中一个 URL 允许调用者通过 id 请求特定人员的记录。 返回该 id 不存在的记录的常规值是什么?服务器是否应该发回一个空对象或者一个 404,或者其他什
我正在使用 pathlib.Path() 检查文件是否存在,并使用 rasterio 将其作为图像打开. filename = pathlib.Path("./my_file-name.tif") 但
我正在寻找一种 Pythonic 方式来从列表和字典创建嵌套字典。以下两个语句产生相同的结果: a = [3, 4] b = {'a': 1, 'b': 2} c = dict(zip(b, a))
我有一个正在操裁剪理设备的脚本。设备有时会发生物理故障,当它发生时,我想重置设备并继续执行脚本。我有这个: while True: do_device_control() device
做组合别名的最pythonic和正确的方法是什么? 这是一个假设的场景: class House: def cleanup(self, arg1, arg2, kwarg1=False):
我正在开发一个小型客户端服务器程序来收集订单。我想以“REST(ful)方式”来做到这一点。 我想做的是: 收集所有订单行(产品和数量)并将完整订单发送到服务器 目前我看到有两种选择: 将每个订单行发
我知道在 Groovy 中您可以使用字符串调用类/对象上的方法。例如: Foo."get"(1) /* or */ String meth = "get" Foo."$meth"(1) 有没有办法
在 ECMAScript6 中,您可以使用扩展运算符来解构这样的对象 const {a, ...rest} = obj; 它将 obj 浅拷贝到 rest,不带属性 a。 有没有一种干净的方法可以在
我有几个函数返回数字或None。我希望我的包装函数返回第一个不是 None 的结果。除了下面的方法之外,还有其他方法吗? def func1(): return None def func2(
假设我想设计一个 REST api 来讨论歌曲、专辑和艺术家(实际上我就是这样做的,就像我之前的 1312414 个人一样)。 歌曲资源始终与其所属专辑相关联。相反,专辑资源与其包含的所有歌曲相关联。
这是我认为必须经常出现的问题,但我一直无法找到一个好的解决方案。假设我有一个函数,它可以作为参数传递一个开放资源(如文件或数据库连接对象),或者需要自己创建一个。如果函数需要自己打开文件,最佳实践通常
我是一名优秀的程序员,十分优秀!