我目前正在尝试在JPanel
内绘制形状,该JPanel
位于JFrame
内的另一个JFrame
内。
我搜索了谷歌和Youtube,并找到了如何在public class GameScreen
{
public void paintComponent(Graphics g)
{
super.paintComponent(g);
g.setColor(Color.red);
g.drawRect(100, 10, 30, 40);
}
public static void main(String[] args)
{
GameScreen gs = new GameScreen();
JFrame f = new JFrame();
f.setTitle("");
f.setSize(400,400);
f.setVisible(true);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add(gs);
}
内绘制有一个面板的形状,但却找不到任何可以帮助我正在做的事情。 (也许我没看到什么)。
到目前为止我见过的代码:
{{1}}
当我只处理一个面板时,这一切都很好,但我想在我创建的第一个面板内的面板上显示形状。
答案 0 :(得分:2)
以与您现在相同的方式将Jarame添加到JFrame,但是使用您自己的JPanel子类来执行此操作。
class MyPanel extends JPanel {
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.red);
g.drawRect(100, 10, 30, 40);
}
@Override
public Dimension getPreferredSize() {
return new Dimension(400,400); // As suggested by camickr
}
}
您可以将其添加到位于JFrame
中的JPanelpublic static void main(String[] args)
{
MyPanel mp = new MyPanel();
JPanel jp = new JPanel();
jp.add(mp);
JFrame f = new JFrame();
f.setTitle("");
f.setSize(400,400);
f.setVisible(true);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add(jp);
}
如果将组件添加为子组件,则可以对组件中的组件起作用。关键是扩展组件并覆盖您想要更改的方法。
答案 1 :(得分:2)
当我只处理一个小组时,这一切都很好,
您发布的代码工作正常,因为框架使用BorderLayout。因此,当您将面板添加到框架时,将增加尺寸,并且可以看到您的自定义绘画。
我想在我创建的第一个面板内的面板上显示形状。
创建面板时,默认情况下使用FlowLayout。当您向该面板添加自定义绘画面板时,它将以其首选大小显示,该大小将为(0,0),因为您未指定首选大小。
在进行自定义绘制的面板上,您还需要实现getPreferredSize()方法,以便布局管理器知道如何排列面板。例如:
public Dimension getPreferredSize()
{
return new Dimension(200, 200);
}