【问题标题】:Java Jlabel Update TextJava Jlabel 更新文本
【发布时间】:2014-07-08 21:20:41
【问题描述】:

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);

}
}

【问题讨论】:

  • 欢迎来到stackoverflow。请仅提供相关的代码和您面临的错误/问题。
  • JLabel 支持显示图片; How to use labels。在执行任何自定义绘画之前,您应该致电 super.paintComponent。避免使用setPreferred/Minimum/MaximumSize,而是覆盖你需要的方法
  • 如果您使用像 Eclipse 或 NetBeans 这样的 IDE,您可以让它为您自动格式化您的代码。看看吧。

标签: java swing text jframe jlabel


【解决方案1】:

问题 #1

Swing 与大多数 GUI 一样,是事件驱动的,即发生某些事情,然后您对其做出响应。这会使您的程序非线性(代码不会直线前进)。

事件可能因多种原因随时发生,具体取决于事件。这意味着...

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

永远不会是true,因为在程序解释这个命令的时候事件还没有发生

问题 #2

要解决此问题,您的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);
}

问题 #3

鼠标事件与MouseListener 注册的组件相关。这意味着一些事情,但在您的情况下,JLabelImageImplement 可能会阻止阻止鼠标事件到达MouseListener 注册到的组件。

相反,将MouseListener 添加到ImageImplement 可能会更好...

addMouseListener(panel);

附加

  • JLabel 能够显示图像,除非您正在玩某种图像处理或图形效果,否则使用它可能更容易。
  • 在进行任何其他绘画之前,您应该在ImageImplementpaintComponent 中调用super.paintComponent
  • 您应该避免使用setPreferred/Minimum/MaximumSize,而是根据需要覆盖这些方法以实现您想要的结果

【讨论】:

  • 谢谢你,我知道一定是一个简单的菜鸟错误
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-01
  • 1970-01-01
  • 2018-06-05
  • 2012-08-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多