我之前的代碼有點麻煩。它正在做我想做的事,但我只能調用一次該方法,如果我調用它比它不工作,本質上它只能工作一次。所以現在這個球是一個對象。它從白色開始,將其設置爲綠色,延遲,然後將其設置爲白色,這是完美的。問題是因爲我做了timerG.start();我不會結束它,當我再次調用它時,它不起作用。如果我做timerG.stop();它會忽略動作事件並將其保留爲綠色,而不會回到白色。我怎樣才能做到這一點,所以我可以多次調用這個方法?我如何使這個計時器()工作,因爲我想?
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);
}
}
我稱它爲三次,它只會將其更改爲綠色,回到白色一次,使用附加代碼:/ – Renuz
考慮提供一個[可運行的示例](https://stackoverflow.com/help/mcve),它演示了您的問題。這不是代碼轉儲,而是您正在做的事情的一個例子,它突出了您遇到的問題。這將導致更少的混淆和更好的反應 – MadProgrammer
它使用JFrame,我應該發佈整個事情? – Renuz