java 框架转载无效
java frame reprint not working
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class sample {
JTextField field=new JTextField(10);
JPanel panel=new JPanel();
JFrame frame=new JFrame();
String message;
public sample()
{
frame.setSize(500, 500);
frame.setVisible(true);
frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);
field.setEditable(true);
JButton button=new JButton("press here");
ActionListener listener=new action();
button.addActionListener(listener);
panel.add(field);
panel.add(button);
frame.add(panel);
}
public void getMessage()
{
JTextField f=new JTextField(10);
f.setText(message);
JPanel p=new JPanel();
p.add(f);
frame.add(p);
frame.repaint(); <-- problem here
}
class action implements ActionListener
{
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
message=field.getText();
frame.remove(panel);
getMessage();
}
}
}
//问题是frame没有在getMessage方法中调用repaint方法。所以,我必须最小化 window 来解决这个问题。他们还有其他方法可以解决这个问题吗?
问题是您向可见的 GUI 添加了一个组件。默认情况下,所有组件的大小均为 (0, 0),因此无需绘制任何内容。
您真正需要做的是调用布局管理器,以便确定组件的 size/location。
基本代码应该是:
panel.add(...);
panel.revalidate(); // to invoke the layout manager
panel.repaint(); // to repaint components
在 JDK7 及更高版本中,您还可以在框架上执行 revalidate()/repaint()。
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class sample {
JTextField field=new JTextField(10);
JPanel panel=new JPanel();
JFrame frame=new JFrame();
String message;
public sample()
{
frame.setSize(500, 500);
frame.setVisible(true);
frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);
field.setEditable(true);
JButton button=new JButton("press here");
ActionListener listener=new action();
button.addActionListener(listener);
panel.add(field);
panel.add(button);
frame.add(panel);
}
public void getMessage()
{
JTextField f=new JTextField(10);
f.setText(message);
JPanel p=new JPanel();
p.add(f);
frame.add(p);
frame.repaint(); <-- problem here
}
class action implements ActionListener
{
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
message=field.getText();
frame.remove(panel);
getMessage();
}
}
}
//问题是frame没有在getMessage方法中调用repaint方法。所以,我必须最小化 window 来解决这个问题。他们还有其他方法可以解决这个问题吗?
问题是您向可见的 GUI 添加了一个组件。默认情况下,所有组件的大小均为 (0, 0),因此无需绘制任何内容。
您真正需要做的是调用布局管理器,以便确定组件的 size/location。
基本代码应该是:
panel.add(...);
panel.revalidate(); // to invoke the layout manager
panel.repaint(); // to repaint components
在 JDK7 及更高版本中,您还可以在框架上执行 revalidate()/repaint()。