簡體   English   中英

另一個JLabel的setText class. Java

[英]setText of JLabel in another class. Java

所以,我見過很多類似的問題,但它們都有點不同,似乎不適合我的問題。

因此,我有一個“主”class、一個“面板”class 和一個“日”class。在我的面板 class 中,我創建了一個 JFrame 對象,並在我的面板 class 中創建了一個 JTextFiton 當文本字段的內容是“星期一”時,我想顯示當天的名稱,而我在這一天上學。 為此,我想使用 JLabel。 由於顯示日期名稱等的方法在日期 class 內,我必須在面板 class 內創建 JLabel object,但在日期 class 內對其進行編輯。

但是,當我使用 text.setText("Test"); 它不編譯。 在Eclipse,報如下錯誤:text cannot be resolved (text is my JLabel object)。 我認為 Day class 根本不知道文本 object(即使我制作文本 object static,這在類似情況下有所幫助)。

編輯:根據 DevilsHnd 的提議進行了調整。 還是不行

Class 日:

package basicsPack;

import java.awt.Color;
import basicsPack.Panel.*;
import javax.swing.JLabel;

public class Day{
    
    boolean isSchool;
    String[] stunden;
    String name;
    
    
    public Day(boolean isSchool, String[] stunden, String name) {
        
        this.isSchool = isSchool;  
        this.stunden = stunden;
        this.name = name;
        
    }
    
    public void sagName() {
        
        System.out.println(this.isSchool);
        System.out.println(this.name);
        text.setText("Label Text"); //This is what gives an error.
    }
}

面板 Class:

package basicsPack;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Scanner;

import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class Panel extends JPanel implements ActionListener {
    
    //Screen Settings
    final int originalTileSize = 16;
    final int scale = 3;
    final int tileSize = originalTileSize * scale;
    final int maxScreenCol = 16;
    final int maxScreenRow = 12;
    final int screenWidth = tileSize * maxScreenCol;
    final int screenHeight = tileSize * maxScreenRow;
    
    JLabel text;
    JButton knopf;
    JTextField field;
    Tage days; 
    String textInhalt;
    
        public Panel(){
        
        this.setPreferredSize(new Dimension(screenWidth, screenHeight));
        this.setBackground(Color.black);
        this.setDoubleBuffered(true);
        this.setFocusable(true);
        
        //Initialize Button 
        knopf = new JButton("klick");
        knopf.addActionListener(this);
        knopf.setPreferredSize(new Dimension (100, 35));
        
        //Initialize Text field 
        field = new JTextField();
        field.setFont(new Font("Serif",Font.BOLD,30));
        field.setPreferredSize(new Dimension (200, 50));
        
        text = new JLabel("asd");
        text.setForeground(Color.red);
        
        this.add(field);
        this.add(knopf);
        this.add(text);

        }
    
    public void loop() {
        
        try (Scanner input = new Scanner(System.in))
        {

                System.out.println("welchen Tag? ");
            
                switch(textInhalt) 
                {
                
                case "Montag":
                    Montag.sagName();
                    break;
                    
                case "Dienstag":
                    Dienstag.sagName();
                    break;
                    
                case "Mittwoch":
                    Mittwoch.sagName();
                    break;
                    
                case "Donnerstag":
                    Donnerstag.sagName();
                    break;  
        
                case "Freitag":
                    Freitag.sagName();
                    break;
                
                case "Samstag":
                    Samstag.sagName();
                    break;
                    
                case "Sonntag":
                    Sonntag.sagName();
                    break;  
                }
            }   
        }
    
        static String[] monHours = {"Bio", "Bio", "Mathe", "Mathe", "Chemie", "Chemie", "frei", "Musik", "Musik"};
        static String[] dinHours = {"", "", "", "", "", "", "", "", ""};
        static String[] mitHours = {"", "", "", "", "", "", "", "", ""};
        static String[] donHours = {"", "", "", "", "", "", "", "", ""};
        static String[] freHours = {"", "", "", "", "", "", "", "", ""};
        static String[] samHours = {"", "", "", "", "", "", "", "", ""};
        static String[] sonHours = {"", "", "", "", "", "", "", "", ""};
        
        static Day Montag = new Tage(true, monHours, "Montag");
        static Day Dienstag = new Tage(true, dinHours, "Dinestag")  ;
        static Day Mittwoch = new Tage(true, mitHours, "Mittwoch")  ;
        static Day Donnerstag = new Tage(true, donHours, "Donnerstag")  ;
        static Day Freitag = new Tage(true, freHours, "Freitag")  ;
        static Day Samstag = new Tage(false, samHours, "Samstag")  ;
        static Day Sonntag = new Tage(false, sonHours, "Sonntag")  ;        
        
        
        @Override
        public void actionPerformed(ActionEvent e) {
            if(e.getSource()==knopf) {
    
                textInhalt = field.getText();
                loop();
            }
        }
}

您尚未將 JLabel 聲明為 class 成員以使其 class 成為全局成員,例如:

public class Panel extends JPanel implements ActionListener {

//Screen Settings
final int originalTileSize = 16;
final int scale = 3;
final int tileSize = originalTileSize * scale;
final int maxScreenCol = 16;
final int maxScreenRow = 12;
final int screenWidth = tileSize * maxScreenCol;
final int screenHeight = tileSize * maxScreenRow;

JButton knopf;
JTextField field;
JLabel text;        // <-- Added!!
Tage days; 
String textInhalt;

    public Panel(){
    
    this.setPreferredSize(new Dimension(screenWidth, screenHeight));
    this.setBackground(Color.black);
    this.setDoubleBuffered(true);
    this.setFocusable(true);
    
    //Initialize Button 
    knopf = new JButton("klick");
    knopf.addActionListener(this);
    knopf.setPreferredSize(new Dimension (100, 35));
    
    //Initialize Text field 
    field = new JTextField();
    field.setFont(new Font("Serif",Font.BOLD,30));
    field.setPreferredSize(new Dimension (200, 50));
    
    text = new JLabel("asd");       // <-- Modified!!
    text.setForeground(Color.red);
    
    this.add(field);
    this.add(knopf);

    // ......  The rest of you Panel class here  ......

當天class:

package basicsPack;

import java.awt.Color;
import basicsPack.Panel.*;
import javax.swing.JLabel;

public class Day {
    
    boolean isSchool;
    String[] stunden;
    String name;
    
    
    public Day(boolean isSchool, String[] stunden, String name) {
        this.isSchool = isSchool;  
        this.stunden = stunden;
        this.name = name;
    }
    
    public void sagName() {
        System.out.println(this.isSchool);
        System.out.println(this.name);
        Panel.text.setText("Label Text");  //  <---
    }
}

你的Day class 是一個數據 class。它根本不應該有任何對JPanel的引用。

這是Day class 的樣子:

package basicspack;

public class Day {

    boolean isSchool;
    String[] stunden;
    String name;

    public Day(boolean isSchool, String[] stunden, String name) {
        this.isSchool = isSchool;
        this.stunden = stunden;
        this.name = name;
    }

    public boolean isSchool() {
        return isSchool;
    }

    public void setSchool(boolean isSchool) {
        this.isSchool = isSchool;
    }

    public String[] getStunden() {
        return stunden;
    }

    public void setStunden(String[] stunden) {
        this.stunden = stunden;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

}

您可以通過調用Day getter 方法來更改ActionListenerJLabel的文本。

不要將您的類 ( Panel ) 命名為與 Java 標准類 ( java.awt.Panel ) 相同的名稱。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM