2016-10-28 2 views
-1

(Извините за плохой английский) Я пытаюсь отредактировать JLabel из другого класса, и это успех, но я нашел проблему, которая после редактирования текста откроет другое окно.

Как это исправить?
Код:
Menu.java:setText из другого класса откроет еще одно окно

package Demo1; 

import java.awt.*; 
import java.io.IOException; 
import java.net.*; 
import java.util.*; 
import java.util.Timer; 
import javax.net.SocketFactory; 
import javax.swing.*; 
import javax.swing.event.*; 
import javax.swing.plaf.synth.ColorType; 
import java.awt.Window.Type; 

public class Menu extends JFrame { 
    JFrame f; 
    public static void main(String argv[]){ 
     new Menu(); 
     Sdle(); 
    } 
    public static void Sdle() { 
     Timer Timer = new Timer(); 
     Timer.schedule(new ServerPing(), 1, 120000); 

    } 
    public Font nmFont(Integer Size) { 
     Font NewFont = new Font("TimesRoman", Font.PLAIN, Size); 
     return NewFont; 
    } 
    public void setSerLabel(String CT){ 
     ServerStatusLb.setText(CT); 
    } 
    public void setClockLabel(String CT1){ 
     ClockLb.setText(CT1); 
    } 
    private JLabel ClockLb = new JLabel("Timer",SwingConstants.CENTER); 
    private JLabel ServerStatusLb = new JLabel("New label",SwingConstants.CENTER); 
    public Menu(){ 
     JFrame.setDefaultLookAndFeelDecorated(true); 
     JDialog.setDefaultLookAndFeelDecorated(true); 
     f=new JFrame("Menu"); 
     f.setResizable(false); 
     f.setSize(470,345); 
     f.setLocationRelativeTo(null); 
     f.setVisible(true); 
     Container cp=f.getContentPane(); 
     cp.setLayout(null); 

     ClockLb.setBounds(0, 0, 454, 75); 
     ClockLb.setFont(nmFont(66)); 
     cp.add(ClockLb); 

     ServerStatusLb.setBounds(153, 79, 160, 31); 
     ServerStatusLb.setFont(nmFont(20)); 
     cp.add(ServerStatusLb); 
    } 
} 

И ClockMa.java (Управление этикетки часы):

package Demo1; 

import java.text.*; 
import java.util.*; 

public class ClockMa extends TimerTask { 
    @Override 
    public void run() { 
     DateFormat dateFormat = new SimpleDateFormat("HH:mm:ss"); //可用: YY, MM, DD, HH, mm, ss 
     Date date = new Date(); 
     Menu MN = new Menu(); 
     MN.setClockLabel(dateFormat.format(date)); 
    } 

} 
+1

Это не настройка текста, открывающего окно: это 'новое меню()'. Поскольку конструктор 'Menu()' создает 'JFrame' и вызывает' f.setVisible (true) '. Вы уверены, что хотите создать новое «меню» в задаче таймера? – khelwood

+0

Вы должны объяснить, почему вам нужен класс * ClockMa * для изменения метки. –

ответ

0

new Menu() создает новое меню каждый раз, когда run() работает. Скорее создайте экземпляр меню за пределами операции run() и установите текст ярлыка в операции run().

+0

Как создать экземпляр меню вне 'run()'?? – yo777