简体   繁体   English

对象在调整大小时以及窗口最小化时消失

[英]Objects disappear on resize and when the window is minimized

i need some help with this code. 我需要一些与此代码有关的帮助。 I already have the functions of paint the objects and clear the objects from the window but how i can make that when i make a resize or when i minimize the windows the objects doesn't disappear? 我已经具有绘制对象和清除窗口中对象的功能,但是当我调整大小或最小化窗口时,如何使对象不消失呢?

This is the code i have at the moment: 这是我目前的代码:

public class miClass implements ActionListener{
JFrame ventana;
JPanel panel;
JButton p,c;
Graphics g;
Image img;
Font font1,font2,font3;

public miClass(){
    ventana = new JFrame("Aplicacion.");
    p = new JButton("P");
    c = new JButton("C");
    panel = new JPanel();
    ventana.setLayout(null);
    ventana.setBounds(100,100,600,600);
    ventana.getContentPane().add(panel);
    ventana.add(p);
    p.addActionListener(this);
    c.addActionListener(this);
    p.setBounds(20,20,120,45);
    ventana.add(c);
    c.setBounds(200,20,120,45);
    ventana.setFocusable(true);
    ventana.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    ventana.setVisible(true);
}

public void actionPerformed(ActionEvent e) {
    g = ventana.getGraphics();
    Toolkit tool = Toolkit.getDefaultToolkit();
    img = tool.getImage("prueba.png");
    g.drawImage(img,0,100,null);

    font1 = new Font("Helvetica",Font.PLAIN,22);
    g.setFont(font1);
    g.drawString("Hola", 100, 300);

    font2 = new Font("TimesRoman",Font.BOLD,20);
    g.setFont(font2);
    g.drawString("Mundo", 100, 340);

    font3 = new Font("Courier",Font.BOLD+Font.ITALIC,25);
    g.setFont(font3);
    g.drawString("WASAAAA!", 100, 400);

    g.setColor(Color.green);
    g.drawOval(300, 200, 150, 100);
    g.setColor(Color.red);
    g.drawArc(200, 400, 250, 64, 135, 46);
    g.setColor(Color.blue);
    g.drawLine(400, 200, 150, 100);
    g.setColor(Color.magenta);
    g.drawRect(300, 250, 160, 50);
    g.setColor(Color.cyan);
    g.fillRect(100,400,20,240);
    g.setColor(Color.lightGray);
    g.fillOval(100,340,14,30); 

    if(e.getSource() == c){ //Clean all objects on the window//
        g.clearRect(0,100,900,800);
    }
}

public static void main(String args[]){
    miClass GUI = new miClass();
}
}

Your frame is reset to its initial state when it is resized, and your code only redraws it when a button is clicked, not when it is resized. 调整大小后,框架将重置为其初始状态,并且代码仅在单击按钮时重新绘制,而不是在调整大小时重新绘制。 The paintComponent method on any subclass of Component is called after the parent frame is resized, so you can fix this issue by overriding that method. 在调整父框架的大小之后,将调用Component的任何子类上的paintComponent方法,因此您可以通过重写该方法来解决此问题。

package SO;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class miClass implements ActionListener {


  JFrame ventana;
  JPanel panel;
  JButton p, c;
  Graphics g;
  Image img;
  Font font1, font2, font3;

  public miClass() {
    ventana = new JFrame("Aplicacion.");
    p = new JButton("P");
    c = new JButton("C");
    panel = new JPanel() {
      @Override
      public void paintComponent(Graphics g) {
        // your stuff
        font1 = new Font("Helvetica", Font.PLAIN, 22);
        g.setFont(font1);
        g.drawString("THIS GETS REDRAWN", 100, 300);
      }
    };
    panel.setSize(400, 400);
    ventana.setLayout(null);
    ventana.setBounds(100, 100, 600, 600);
    ventana.getContentPane().add(panel);
    ventana.add(p);
    p.addActionListener(this);
    c.addActionListener(this);
    p.setBounds(20, 20, 120, 45);
    ventana.add(c);
    c.setBounds(200, 20, 120, 45);
    ventana.setFocusable(true);
    ventana.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    ventana.setVisible(true);
  }

  public void actionPerformed(ActionEvent e) {
    g = panel.getGraphics();
    Toolkit tool = Toolkit.getDefaultToolkit();
    img = tool.getImage("prueba.png");
    g.drawImage(img, 0, 100, null);

    font1 = new Font("Helvetica", Font.PLAIN, 22);
    g.setFont(font1);
    g.drawString("Hola", 100, 300);

    font2 = new Font("TimesRoman", Font.BOLD, 20);
    g.setFont(font2);
    g.drawString("Mundo", 100, 340);

    font3 = new Font("Courier", Font.BOLD + Font.ITALIC, 25);
    g.setFont(font3);
    g.drawString("WASAAAA!", 100, 400);

    g.setColor(Color.green);
    g.drawOval(300, 200, 150, 100);
    g.setColor(Color.red);
    g.drawArc(200, 400, 250, 64, 135, 46);
    g.setColor(Color.blue);
    g.drawLine(400, 200, 150, 100);
    g.setColor(Color.magenta);
    g.drawRect(300, 250, 160, 50);
    g.setColor(Color.cyan);
    g.fillRect(100, 400, 20, 240);
    g.setColor(Color.lightGray);
    g.fillOval(100, 340, 14, 30);

    if (e.getSource() == c) { // Clean all objects on the window//
      g.clearRect(0, 100, 900, 800);
    }
  }

  public static void main(String args[]) {
    miClass GUI = new miClass();
  }



}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM