我创建了这个绘制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在方法内部进行升级 我尝试将它们添加到动作侦听器中,两者都没有结果。 帧仅在我调整大小或关闭时更新。 对不起,我希望有人可以帮助我。
答案 0 :(得分:0)
我遇到了类似的情况。我没有这方面的解决方案,但我在我的代码中处理这样的解决方法。
frame.setsize(actualWidth-2,actualHeight);
frame.setsize(actualWidth,actualHeight);
frame.repaint();