2014-12-29 4 views
-1

Я создал этот класс, который рисует Jframe и некоторые методы для добавления Ovals.Как обновить 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 (краска/removeFigure) методами я хочу фрейм обновить, но я не могу найти, как это сделать. Я пробовал: раскрыть внутри методы с p.update p.revalidate p.repaint this.update/revalidate/repaint repaint/revalidate/repaint , и я попытался добавить их к прослушивателю действий, в результате чего ничего не получилось. Рамка обновляется только при изменении размера или закрытии. Извините за длинный вопрос, я надеюсь, что кто-то может мне помочь.

+0

1) Для лучшей помощи рано, опубликовать [MCVE] (http://stackoverflow.com/help/mcve) (минимальная Полный Проверяемость пример) или [SSCCE] (HTTP: //www.sscce. org /) (Short, Self Contained, Correct Example). 2) См. [Использование нескольких JFrames, Good/Bad Practice?] (Http://stackoverflow.com/q/9554636/418556) –

ответ

0

Я столкнулся с подобной ситуацией. У меня нет идеального решения для этого, но я работал в своем коде, работая так.

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