簡體   English   中英

Java Jlabel更新文本

[英]Java Jlabel Update Text

1.我正在制作一個cookie單擊克隆,我知道我已經很成熟了,我才12歲,我正在測試自己的能力。 我有一個問題,我正在嘗試更新標簽,但它只是無法嘗試所有操作。還要提前對怪異的縮進和混亂感到抱歉,我也不擅長制作漂亮的代碼類

package learning;


 import java.awt.Component;
 import java.awt.Dimension;
    import java.awt.Font;
 import java.awt.Graphics;
 import java.awt.event.MouseEvent;
   import java.awt.event.MouseListener;
   import javax.swing.*;
   import javax.swing.JPanel;



public class Learning extends JFrame implements MouseListener {
int clicks;
boolean Update;
/**
 * @param args the command line arguments
 */
public static void main(String[] args) {


    new Learning().start();





}
 public void start(){

      ImageImplement panel = new ImageImplement(new ImageIcon("Cookie.jpg").getImage());   
      add(panel);
      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    setVisible(true);
     setSize(600,600);
     setResizable(false);
      JLabel Click = new JLabel("Clicks: " + clicks);
      Click.setFont(new Font("Arial",Font.PLAIN , 20));

      panel.add(Click);
      Click.setSize(100,100);

      Click.setVisible(true);
      addMouseListener(this);
     if(Update == true){
         Click.setText("Clicks: "+ clicks);
         System.out.println("Reached");
     }


}
@Override
public void mouseClicked(MouseEvent e) {
  clicks += 1;
  System.out.println(clicks);

  Update = true;
  if(Update = true){

          Update = false;
  }
}

@Override
public void mousePressed(MouseEvent e) {

}

@Override
public void mouseReleased(MouseEvent e) {

}

@Override
public void mouseEntered(MouseEvent e) {

}

@Override
public void mouseExited(MouseEvent e) {

}













}

其他圖片類

package learning;

import java.awt.Dimension;
 import java.awt.Graphics;
 import java.awt.Image;
 import javax.swing.JPanel;


class ImageImplement extends JPanel {
private Image img;




public ImageImplement(Image img) {

    this.img = img;
    Dimension size = new Dimension(img.getWidth(null), img.getHeight(null));
    setPreferredSize(size);
    setMinimumSize(size);
setMaximumSize(size);
setSize(size);
    setLayout(null);
}

@Override
public void paintComponent(Graphics g){
    g.drawImage(img, 0, 0, getWidth(), getHeight(), null);

}
}

問題1

像大多數GUI一樣,Swing是事件驅動的,發生了某些事情,您對此做出了響應。 這會使您的程序成為非線性程序(代碼不會直線執行)。

事件可能會因多種原因隨時發生,具體取決於事件。 這意味着...

if(Update == true){
     Click.setText("Clicks: "+ clicks);
     System.out.println("Reached");
}

永遠不會為true ,因為在程序解釋此命令時尚未發生該事件

問題二

要解決此問題,您的mouseClicked事件處理程序將需要了解您要更新的對象。 當前,您是在start方法中的局部范圍內聲明變量。

public void start(){
    //...
    ImageImplement panel = new ImageImplement(new ImageIcon("Cookie.jpg").getImage());   
    //...
    JLabel Click = new JLabel("Clicks: " + clicks);
}

您將需要更改它們,以便在類實例級別可以訪問它們。

public class Learning extends JFrame implements MouseListener {
    int clicks;
    boolean Update;
    private ImageImplement panel;
    private JLabel Click

    public void start(){
        //...
        //ImageImplement panel = new ImageImplement(new ImageIcon("Cookie.jpg").getImage());   
        panel = new ImageImplement(new ImageIcon("Cookie.jpg").getImage());   
        //...
        //JLabel Click = new JLabel("Clicks: " + clicks);
        Click = new JLabel("Clicks: " + clicks);
    }

這將允許您從當前類的任何實例內的任何方法訪問這些對象。

然后,在mouseClicked處理程序中,您可以更新Click標簽...

@Override
public void mouseClicked(MouseEvent e) {
    clicks += 1;
    Click.setText("Clicks: "+ clicks);
}

問題三

鼠標事件與注冊MouseListener的組件有關。 這意味着一些事情,但是就您而言, JLabelImageImplement可能會阻止阻止鼠標事件到達注冊MouseListener的組件。

相反,最好將MouseListener添加到ImageImplement

addMouseListener(panel);

額外

  • JLabel能夠顯示圖像,除非您正在玩某種圖像處理或圖形效果,否則使用它可能會更容易。
  • 在進行任何其他繪畫之前,應該在ImageImplementpaintComponent調用super.paintComponent
  • 您應避免使用setPreferred/Minimum/MaximumSize ,而應根據需要重寫這些方法以實現所需的結果

暫無
暫無

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

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