2014-01-07 3 views
0

Как создать кнопку, которая обновляет текст в 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); 
} 
+0

как это _ не работает_? – Reimeus

+0

Что вы пытаетесь сделать, когда вы нажимаете 'NewButton2'? – nachokk

+0

Когда кнопка активирована, попробуйте на самом деле изменить текст текстовой области ... – MadProgrammer

ответ

2

Вы должны обновить время в 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() после добавления компонентов.

1

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

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

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

1

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

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

JButton NewButton2 = new JButton(new AbstractAction() { 
    @Override 
    public void actionPerformed(final ActionEvent e) { 
     Text.setText(""+System.currentTimeMillis()); 
    } 
}); 
Смежные вопросы