I wanted to highlight the panel,for a specific time (just like in karaoke apps). each panel will have a specific time for highlighting.How to highlight a panel for an example a 3*3 panel like tic tac toe.I searched a lot on stackoverflow and google,but dead end. and can i take help of java .please help me out. I found on how to highlight a word like kareoke, but I didnt know how to replace the word as button panel
This is the code for highlight word:
public class processingTest {
private int[] timings = {2000, 1000, 4000, 2000, 3000};//char timings
private String[] words = {"H", "e", "l", "l", "o"};//each indiviaul word
private String sentence = "Hello";//entire string for writing to JSCrollPane
private DefaultHighlighter.DefaultHighlightPainter highlightPainter = new DefaultHighlighter.DefaultHighlightPainter(Color.GREEN);
private int count = 0;
private boolean fisrTime = true;
private JFrame frame;
private JTextPane jtp;
JButton startButton;
public processingTest() {
initComponents();
}
private void initComponents() {
frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setResizable(false);
jtp = new JTextPane();
jtp.setText(sentence);
startButton = new JButton("Start");
startButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent ae) {
startKaraoke();
}
});
frame.add(jtp, BorderLayout.CENTER);
frame.add(startButton, BorderLayout.SOUTH);
frame.pack();
frame.setVisible(true);
}
private void startKaraoke() {
if (fisrTime) {
startButton.setEnabled(false);
fisrTime = false;
}
new Thread(new Runnable()
{
@Override
public void run()
{
Timer t = createAndStartTimer(timings[count], count);
while (t.isRunning()) {//wait for timer to be done
try {
Thread.sleep(1);
} catch (InterruptedException ex) {
ex.printStackTrace();
}
}
SwingUtilities.invokeLater(new Runnable()
{
@Override
public void run() {
count++;
if (count == timings.length) {
JOptionPane.showMessageDialog(frame, "Done");
startButton.setEnabled(true);
count = 0;
fisrTime = true;
} else {
startKaraoke();
}
}
});
}
}).start();
}
private Timer createAndStartTimer(int delay, final int count) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
int sp = 0;
for (int i = 0; i < count; i++) {
sp += words[i].length();
}
try {
jtp.getHighlighter().addHighlight(sp, sp + words[count].length(), highlightPainter);
} catch (BadLocationException ex) {
ex.printStackTrace();
}
}
});
Timer t = new Timer(delay, new AbstractAction() {
@Override
public void actionPerformed(ActionEvent ae) {
jtp.getHighlighter().removeAllHighlights();
}
});
t.setRepeats(false);
t.start();
return t;
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new processingTest();
}
});
}
}
How about some different approach to highlight a word or a part of a sentence? Use JEditorPane with style sheets like in this example.
Highlight example.
Say you have a sentence "Hello world!". To highlight the part "Hello world!" you could use JTextPane with stylesheets (look for HtmlEditorKit#setStyleSheet) like this: