Кнопка, которая обновляет текст в JFrame

Как создать кнопку, которая обновляет текст в JFrame?

Я просто хочу создать большой ярлык, который отображает много информации в текстовой форме, когда я нажимаю кнопку обновления.

Это не работает:

public void JFrameTest2() {
 JFrame frame = new JFrame();
 frame.setSize(300, 125);
 frame.setUndecorated(true);
 frame.setLayout(new GridBagLayout());
 frame.getContentPane().setBackground(new Color(255, 115, 100));
 frame.setAlwaysOnTop(true);
 Dimension scrSize = Toolkit.getDefaultToolkit().getScreenSize();
 Insets toolHeight = Toolkit.getDefaultToolkit().getScreenInsets(
 frame.getGraphicsConfiguration());
 frame.setLocation(scrSize.width - frame.getWidth(), scrSize.height
 - toolHeight.bottom - frame.getHeight());
 frame.setVisible(true);

 final JTextArea Text = new JTextArea(""+System.currentTimeMillis()); 
 JButton NewButton2 = new JButton(new AbstractAction() {
 @Override
 public void actionPerformed(final ActionEvent e) {

 Text.revalidate();
 Text.repaint();

 }
 }); 
 frame.add(Text);
 frame.add(NewButton2);
}
3 ответа

Вы должны обновить время в ActionListener. Вам не нужно вызывать revalidate или repaint только setText() или append если вы не хотите удалять предыдущий текст.

final JTextArea textArea = new JTextArea(Long.ToString(System.currentTimeMillis())); 
JButton newButton2 = new JButton("Update time");
newButton2.addActionListener(new ActionListener(){
 @Override
 public void actionPerformed(final ActionEvent e) { 
 textArea.setText(Long.toString(System.currentTimeMillis())); 
 }
});

В качестве дополнительной заметки следуйте соглашениям о java-кодах, переменные начинаются с нижнего регистра, вызывать setVisible() после добавления компонентов.


Вероятно, вам стоит прочитать, что делают #revalidate() и #repaint(). У меня такое ощущение, что вы сделали неверное предположение.

И это не обновляет содержимое вашей текстовой области, потому что вы не сказали об этом в своем методе actionPerformed. Предполагая, что вы просто хотите записать результат System.currentTimeMillis(), просто напишите следующее при построении JButton.

JButton NewButton2 = new JButton(new AbstractAction() {
 @Override
 public void actionPerformed(final ActionEvent e) {
 Text.setText(""+System.currentTimeMillis());
 }
});


Вы должны добавить

Text.setText(""+System.currentTimeMillis());

внутри actionPerformed callback. Просто вызов revalidate/repaint не обновит текст.

licensed under cc by-sa 3.0 with attribution.