2017-02-23 10 views
-1

Мой основной метод устанавливается следующим образом:линии к JPanel не работает

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); 

И мой LinePaintDemo класс настроен следующим образом:

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 содержит точки, в которых можно рисовать линии от. A 4 означает движение, 5 означает отбор. Что-то вроде так,

4,139.0,172.0

5,135.0,175.0

5,131.0,176.0

5,125.0,190.0

Однако, когда это красили, он просто показывает небольшую коробку в мой JPanel, например:

The Program

Любые предложения относительно того, почему это делается?

+0

Чтобы лучше помочь, отправьте сообщение [MCVE] или [Short, Self Contained, Correct Example] (http://www.sscce.org/). –

+0

'panel.setBounds (contentPane.getX(), contentPane.getY(), 508, 470);' не является хорошей идеей по ряду причин, для начала в 'ContentPane' есть менеджер компоновки, координата система также основана на родительском, что означает, что верхний левый угол равен '0x0', он уже смещен для вас – MadProgrammer

+0

@MadProgrammer Итак, если я избавлюсь от setBounds, как панель будет представлена ​​в contentPane? Удаление setBounds просто избавляется от цветного JPanel – SwaggyC

ответ

2
  1. Ваша пользовательская панель должна реализовать метод getPreferredSize(), чтобы менеджер по планированию мог выполнять свою работу.

  2. A покраска метод только для покраски. Вы не должны использовать сканер для ввода. Логику сканера следует вызывать из конструктора вашего класса. У вас будет два подхода, чтобы сделать свою картину: а) вы можете хранить объект, который хотите рисовать, или b) вы можете рисовать BufferedImage. Ознакомьтесь с примерами обоих этих подходов: Custom Painting Approaches.

Смежные вопросы