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

관련 문제