我正在用Swing编写我的第一个Java GUI。 我正在尝试创建一个10X10点的面板,并在这些点上绘制线条。
问题是我只能创建上述之一。 这意味着我可以创建一个10X10点的矩阵或创建线。
这是我的代码:
public class Main {
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setTitle("DrawMatrix");
frame.setResizable(false);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(new DrawRectPanel());
frame.setSize(240, 260);
frame.setVisible(false);
frame.getContentPane().add(new DrawLine());
frame.setVisible(true);
}
}
public class DrawRectPanel extends JPanel{
final static int DIST = 20;
final static int MAX_ROW = 11;
final static int MAX_COL = 11;
int i = 1;
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
{
// Points matrix
int x = 0;
for(int row = 1; row < MAX_ROW; row++)
{
x = row * DIST;
for(int col = 1; col < MAX_COL; col++)
{
int y = col * DIST;
g.setColor(Color.blue);
g.drawLine(x,y,x,y+1);
}
}
}
}
}
public class DrawLine extends JPanel {
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawLine(20,20,40,40);
}
}
知道为什么吗?我应该以不同的方式使用setVisible吗?
答案 0 :(得分:3)
在连续调用add(..)
时,您会覆盖添加到 contentPane 的每个组件。
我希望他们两个都在中心,因为我想从点到点画线
您应该使用需要单个DrawingPanel
的方法,可以将对象绘制到该方法中。您可能还需要一个数组来保存要绘制的形状,因此可以很容易地获取和操作paintComponent(..)
。
请务必记住在Event Dispatch Thread via SwingUtilities.inovkeLater(..)
上创建所有Swing组件
不要在setSize()
上致电JFrame
,而是在设置pack()
可见而非覆盖JFrame
或getPrefferedSize
{之前致电setPrefferedSize
{1}}并返回适合所有绘图的尺寸。
JPanel
无需在getContentPand.add(..)
上致电add(..)
,因为来电将转至 contentPane
以下是一个示例(基本上您使用上述修补程序编写代码)
JFrame