私は学習Javaでの例に取り組んでいた:私はこのプログラムに出くわしたときオライリーから第4版は:この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){}
}
}
プログラムは、テキスト作りになっている「こんにちは、Javaの!」箱の瞬きで何らかの理由で、テキストが表示されません。 "色の変更"というJButtonがありますが、動作しません(または、JFrame/HelloComponent4にテキストがないため、動作しないことがあります)。
私はSwingやAWTに精通していないので、助けていただければ幸いです。
ありがとうございます。これはとても役に立ちました –
@NiteshKartha:ようこそ。答えを編集してください。 –