Я создал этот класс, который рисует 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 , и я попытался добавить их к прослушивателю действий, в результате чего ничего не получилось. Рамка обновляется только при изменении размера или закрытии. Извините за длинный вопрос, я надеюсь, что кто-то может мне помочь.
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) –