Swing:无法绘制矩形
Swing: can't paint rectangle
我有这个简单的代码:JFrame
添加了自定义 Jpanel
MyPanel,它覆盖了 paintComponent
方法来绘制矩形。但是 window:
上没有显示任何内容
import javax.swing.*;
import java.awt.*;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class TestGui extends JFrame {
public TestGui() {
setLayout(new FlowLayout());
JPanel panel = new JPanel();
panel.add(new JLabel("H E L L O"));
getContentPane().add(panel);
getContentPane().add(new MyPanel());
setSize(100, 100);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
repaint();
revalidate();
setVisible(true);
}
class MyPanel extends JPanel {
private int squareX = 50;
private int squareY = 50;
private int squareW = 20;
private int squareH = 20;
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.RED);
g.fillRect(squareX,squareY,squareW,squareH);
}
}
public static void main(String[] args) {
TestGui gui = new TestGui();
}
}
默认情况下,空 JPanel
的大小为 0x0
,因此当您将它添加到 UI 时,布局管理器(在本例中)会尊重它的请求并且使之成为 0x0
首先添加...
@Override
public Dimension getPreferredSize() {
return new Dimension(100, 100);
}
到MyPanel
此外,repaint
和 revalidate
调用不会执行任何操作,因为 window 尚未附加到本机对等点(渲染表面)
我有这个简单的代码:JFrame
添加了自定义 Jpanel
MyPanel,它覆盖了 paintComponent
方法来绘制矩形。但是 window:
import javax.swing.*;
import java.awt.*;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class TestGui extends JFrame {
public TestGui() {
setLayout(new FlowLayout());
JPanel panel = new JPanel();
panel.add(new JLabel("H E L L O"));
getContentPane().add(panel);
getContentPane().add(new MyPanel());
setSize(100, 100);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
repaint();
revalidate();
setVisible(true);
}
class MyPanel extends JPanel {
private int squareX = 50;
private int squareY = 50;
private int squareW = 20;
private int squareH = 20;
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.RED);
g.fillRect(squareX,squareY,squareW,squareH);
}
}
public static void main(String[] args) {
TestGui gui = new TestGui();
}
}
默认情况下,空 JPanel
的大小为 0x0
,因此当您将它添加到 UI 时,布局管理器(在本例中)会尊重它的请求并且使之成为 0x0
首先添加...
@Override
public Dimension getPreferredSize() {
return new Dimension(100, 100);
}
到MyPanel
此外,repaint
和 revalidate
调用不会执行任何操作,因为 window 尚未附加到本机对等点(渲染表面)