[英]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);
}
}
像大多數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
的組件有關。 這意味着一些事情,但是就您而言, JLabel
和ImageImplement
可能會阻止阻止鼠標事件到達注冊MouseListener
的組件。
相反,最好將MouseListener
添加到ImageImplement
。
addMouseListener(panel);
JLabel
能夠顯示圖像,除非您正在玩某種圖像處理或圖形效果,否則使用它可能會更容易。 ImageImplement
的paintComponent
調用super.paintComponent
。 setPreferred/Minimum/MaximumSize
,而應根據需要重寫這些方法以實現所需的結果
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.