Java 连接到JPanel的线路不工作
我的主要方法是这样设置的:Java 连接到JPanel的线路不工作,java,swing,graphics,jpanel,line,Java,Swing,Graphics,Jpanel,Line,我的主要方法是这样设置的: JPanel contentPane; contentPane = (JPanel) rootPaneContainer.getContentPane(); contentPane.setSize(508, 650); panel = new JPanel(); panel.setBounds(contentPane.getX(), contentPane.getY(), 508, 470); panel.setBackgrou
JPanel contentPane;
contentPane = (JPanel) rootPaneContainer.getContentPane();
contentPane.setSize(508, 650);
panel = new JPanel();
panel.setBounds(contentPane.getX(), contentPane.getY(), 508, 470);
panel.setBackground(new Color(177, 154, 212));
panel.add(new LinePaintDemo());
contentPane.add(panel);
contentPane.setVisible(true);
public class LinePaintDemo extends JPanel{
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
try
{
scan = new Scanner(new File("area.map"));
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
StringTokenizer token;
double prevx = 0;
double prevy = 0;
double nextx = 0;
double nexty = 0;
while(scan.hasNextLine())
{
String line = scan.nextLine();
token = new StringTokenizer(line, ",");
if(token.nextToken().equals("4"))
{
prevx = Double.parseDouble(token.nextToken());
prevy = Double.parseDouble(token.nextToken());
}
else
{
nextx = Double.parseDouble(token.nextToken());
nexty = Double.parseDouble(token.nextToken());
}
g.drawLine((int)prevx, (int)prevy, (int)nextx, (int)nexty);
prevx = nextx;
prevy = nexty;
}
我的LinePaintDemo类的设置如下:
JPanel contentPane;
contentPane = (JPanel) rootPaneContainer.getContentPane();
contentPane.setSize(508, 650);
panel = new JPanel();
panel.setBounds(contentPane.getX(), contentPane.getY(), 508, 470);
panel.setBackground(new Color(177, 154, 212));
panel.add(new LinePaintDemo());
contentPane.add(panel);
contentPane.setVisible(true);
public class LinePaintDemo extends JPanel{
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
try
{
scan = new Scanner(new File("area.map"));
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
StringTokenizer token;
double prevx = 0;
double prevy = 0;
double nextx = 0;
double nexty = 0;
while(scan.hasNextLine())
{
String line = scan.nextLine();
token = new StringTokenizer(line, ",");
if(token.nextToken().equals("4"))
{
prevx = Double.parseDouble(token.nextToken());
prevy = Double.parseDouble(token.nextToken());
}
else
{
nextx = Double.parseDouble(token.nextToken());
nexty = Double.parseDouble(token.nextToken());
}
g.drawLine((int)prevx, (int)prevy, (int)nextx, (int)nexty);
prevx = nextx;
prevy = nexty;
}
area.map包含要从中绘制线的点。4表示移动到,5表示从。诸如此类
4139.0172.0
5135.0175.0
5131.0176.0
5125.0190.0
然而,当它被绘制时,它只是在我的JPanel中显示一个小框,如下所示:
关于它为什么这样做有什么建议吗
getPreferredSize()
方法,以便布局管理器可以完成其工作为了更快地获得更好的帮助,发布一个or.
panel.setBounds(contentPane.getX(),contentPane.getY(),508470)
不是一个好主意,原因有很多,首先,contentPane
有一个布局管理器,坐标系也基于父坐标系,这意味着左上角是0x0
,它已经偏移了you@MadProgrammer好吧,若我去掉了挫折,那个么面板是如何在contentPane中表示的呢?删除设置边界只需删除彩色JPanelBy默认值JFrame
使用BorderLayout
,但JPanel
使用FlowLayout
。我想您可能需要看一看