如何从其他类更新 JFrame



我创建了这个类来绘制一个Jframe和一些添加椭圆的方法。

public class GUI extends JFrame
{   
 ImageIcon icon; 
 JFrame f = new JFrame();
 JPanel p = new JPanel();
 JLabel j;
 BufferedImage img; 
 public GUI() {
    frameErzeugen();
    StartPosition();
    f.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
}
public void frameErzeugen()
{   
     File file = new File("SpielfeldwoR.jpg");
     try {
         this.img = ImageIO.read(file);
     } catch (IOException ex) {
         ex.printStackTrace();
     } 
    icon = new ImageIcon(img); 
    JLabel j = new JLabel(icon);
    Container cp = getContentPane();
    cp.setLayout (new BorderLayout());
    p.setBounds(0, 0, 1920, 1080);
    p.setLayout(new BorderLayout());
    p.setVisible(true);
    cp.add(j);
    cp.setVisible(true);
    f.pack();
    f.setVisible(true);    
   f.setContentPane(cp);   
}
public void  ZeichneFigur(String position) {
    Graphics g = getGraphics();
    String[] parts = position.split("\.");
    String part0 = parts[0];
    String part1 = parts[1];
    int k = Integer.valueOf(part1);
    if (part0.equals("gr")) {
        g.setColor(Color.GREEN);
        gruen[k] = true;
         switch (k) {
         case 1: 
             g.fillOval(803,489,58,58);
             break;
         case 2:
             g.fillOval(724,489,58,58);
             break; // more cases following
              .... }

然后我有另一个类来处理另一个 jframe 和其中的输入:

public class WFenster extends JFrame implements ActionListener{
private static final long serialVersionUID = 1L;
GUI fe = new GUI(); 
public void setWFrame() {
    // left out: buttons ad layout etc.
    wButton.addActionListener(this);
    bButton.addActionListener(this);
}        
public WFenster() {
    setWFrame();
    wFrame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
}
@Override
public void actionPerformed(ActionEvent e) {
     if(e.getSource() == wButton) {
         int p = wuerfel1.random();
         Erg.setText("        "+String.valueOf(p));
         while (p == 6) {
             bButton.setEnabled(true);
             break;
             }    }
     if(e.getSource() == bButton) {
        bButton.setEnabled(false);
                         if(rgruen.isSelected()) {
                            System.out.println("blub"); 
                             if(GUI.isBesetzt("gr.110") || GUI.isBesetzt("gr.1") == false)
                                { 
                                 Graphics g = fe.img.getGraphics();
                                 fe.EntferneFigur("gr.110");
                                 fe.ZeichneFigur("gr.1");
                                }
                            }

当我调用 Entferne/zeichneFigur (paint/removeFigure) 方法时,我希望 jframe 更新,但我找不到方法。我试过:使用 p.update p.revalidate p.repaint this.update/revalidate/repaint repaint repaint/revalidate/repaint我尝试将它们添加到操作侦听器中,但都没有结果。框架仅在我调整大小或关闭它时更新。很抱歉这个很长的问题,我希望有人可以帮助我。

我遇到了类似的情况。我没有针对此的 perfact 解决方案,但我在我的代码中处理了这样的解决方法。

frame.setsize(actualWidth-2,actualHeight);
frame.setsize(actualWidth,actualHeight);
frame.repaint();

最新更新