如何从另一个类更新JFrame

时间:2014-12-29 12:58:09

标签: java swing user-interface

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

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 / revalidate / repaint在方法内部进行升级 我尝试将它们添加到动作侦听器中,两者都没有结果。 帧仅在我调整大小或关闭时更新。 对不起,我希望有人可以帮助我。

1 个答案:

答案 0 :(得分:0)

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

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