я работал на примере в Learning Java: 4-е издание от O'Reilly, когда я наткнулся на эту программу:Почему текст в этом JFrame не мигает?
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class HelloJava4 {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
JFrame frame = new JFrame("HelloJava4");
frame.add(new HelloComponent4("Hello, Java!"));
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(300, 300);
frame.setVisible(true);
}
}
class HelloComponent4 extends JComponent implements MouseMotionListener, ActionListener, Runnable {
String theMessage;
int messageX = 125, messageY = 95;
JButton theButton;
int colorIndex; //Current index into someColors
static Color[] someColors = {Color.black, Color.red, Color.green, Color.blue, Color.magenta};
boolean blinkState;
public HelloComponent4(String message){
theMessage = message;
theButton = new JButton("Change Color");
setLayout(new FlowLayout());
add(theButton);
theButton.addActionListener(this);
addMouseMotionListener(this);
Thread t = new Thread(this);
t.start();
}
public void paintComponenet(Graphics g){
g.setColor(blinkState ? getBackground() : currentColor());
g.drawString(theMessage, messageX, messageY);
}
@Override
public void mouseDragged(MouseEvent e){
messageX = e.getX();
messageY = e.getY();
repaint();
}
@Override
public void mouseMoved(MouseEvent e){}
@Override
public void actionPerformed(ActionEvent e){
if(e.getSource() == theButton)
changeColor();
}
synchronized private void changeColor(){
if(++colorIndex == someColors.length)
colorIndex = 0;
setForeground(currentColor());
repaint();
}
synchronized private Color currentColor(){
return someColors[colorIndex];
}
@Override
public void run(){
try{
while(true){
blinkState = !blinkState; //Toggle blinkState
repaint(); //show the change
Thread.sleep(300);
}
} catch(InterruptedException ie){}
}
}
Программа должна сделать текст «Hello, Java!» в мигающем окне. По какой-то причине текст даже не появляется. JButton, который говорит «Изменить цвет», есть, но он не работает (или я не вижу его работы, потому что в JFrame/HelloComponent4 нет текста).
Я не знаком с Swing или AWT, поэтому любая помощь будет принята с благодарностью.
Большое вам спасибо. Это было очень полезно –
@NiteshKartha: добро пожаловать. Обратите внимание на изменения. –