Кнопка, которая обновляет текст в 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.