我有这个问题在那里,我已经绘制的对象并不在GUI中出现。 我知道它被处理,因为数据是被推到一个日志文件。 但是,图形没有出现。
下面是一些我的代码:
public static void main(String[] args)
{
JFrame window = new JFrame();
window.setLayout(new BorderLayout());
window.setVisible(true);
}
有一个按钮,我已经在这里和那里放置一些其他的小部件。 中间的窗格(BorderLayout.CENTER)是我的DrawnObject
是要显示。
// Called when button is pushed/clicked
public static void trigger()
{
DrawnObject shape = new DrawnObject();
window.setLayout(new BorderLayout());
window.getContentPane().add(shape, BorderLayout.CENTER);
window.pack;
}
public class DrawnObject extends JComponent()
{
@Override
public Dimension getMinimumSize()
{
return new Dimension(100, 100);
}
@Override
public Dimension getPreferredSize()
{
return new Dimension(500, 500);
}
@Override
public Dimension getMaximumSize()
{
return new Dimension(700, 700);
}
@Override
public void paintComponent(Graphics g)
{
super.paintComponent(g);
g.setColor(Color.RED);
g.fillRect(10, 10, 10, 10);
}
}
我试过铸造Graphics
对象Graphics2D
和使用适当的绘画方法,但是这并没有帮助。
尝试改变颜色......
super.paintComponent(g);
g.setColor(Color.RED);
g.fillRect(10, 10, 10, 10);
图形上下文颜色设置为默认的组件的背景颜色
public class PaintTest01 {
public static void main(String[] args) {
new PaintTest01();
}
public PaintTest01() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException ex) {
} catch (InstantiationException ex) {
} catch (IllegalAccessException ex) {
} catch (UnsupportedLookAndFeelException ex) {
}
JFrame frame = new JFrame("Test");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
frame.add(new DrawPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class DrawPane extends JPanel {
@Override
public Dimension getPreferredSize() {
return new Dimension(30, 30);
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.RED);
g.fillRect(10, 10, 10, 10);
}
}
}
更新
从你的问题你更新的代码,它不能编译...
您创建JFrame
的构造函数,它是一个局部变量命名的窗口...
public static void main(String[] args)
{
JFrame window = new JFrame();
window.setLayout(new BorderLayout());
window.setVisible(true);
}
然后尝试和增加DrawObject
到窗口...
public static void trigger()
{
DrawnObject shape = new DrawnObject();
window.setLayout(new BorderLayout());
window.getContentPane().add(shape, BorderLayout.CENTER);
window.pack;
}
但由于window
是不确定的,例如你不能编译。
这将汇编的唯一方法是,如果你在被称为一流水平有一个静态变量window
,其中在这种情况下,应该产生一个NullPointerException
,除非你初始化变量
public class MyDrawing {
public static JFrame window = new JFrame();
这意味着你有两个框架,一个你在构造函数中创建和一个你创建的静态水平类字段。 这是行不通的,因为它们是不同的情况下,
尝试添加您的DrawnObject
到windows内容窗格,也不要忘记设置的布局。 使用空布局是不好的做法(如果您对无效打电话给你的布局设置为null)。
window.getContentPane().setLayout(new BorderLayout());
window.getContentPane().add(shape, BorderLayout.CENTER);
window.pack();
window.setVisible(true);
另外,尽量跳过invalidate()