2016-11-17 3 views
2

Я пытаюсь рисовать вертикальные линии для разделения дней в неделю на JFrame. Код кажется прекрасным, как никакая ошибка, но когда я его запускаю, он выводит рамку, как на картинке ниже. Я что-то пропустил?Java, Swing - невозможно рисовать линии на JFrame

public class WeekToView extends JFrame{ 
    public WeekToView(){ 

    setTitle("Sheffield Dental Care"); //set title 
    Toolkit toolkit = Toolkit.getDefaultToolkit(); 

    Dimension screenDimensions = toolkit.getScreenSize(); 
    setLocation(new Point(screenDimensions.width*1/4, screenDimensions.height*1/4)); //set location based on screen size 

    JPanel container = new JPanel(); 
    JScrollPane scrPane = new JScrollPane(container); 
    getContentPane().add(scrPane); 
    double size[][] = {{150, 150, 150, 150, 150}, // Columns 
      {100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100}}; // Rows 
    container.setLayout(new TableLayout(size)); 

    String daysInWeek[] = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday"}; 
    JLabel daysInWeekLabels[] = new JLabel[daysInWeek.length]; 

    for (int i = 0; i < daysInWeek.length; i++) { 
     daysInWeekLabels[i] = new JLabel(daysInWeek[i],SwingConstants.CENTER); 
    } 

    container.add(daysInWeekLabels[0], "0,0"); 
    container.add(daysInWeekLabels[1], "1,0"); 
    container.add(daysInWeekLabels[2], "2,0"); 
    container.add(daysInWeekLabels[3], "3,0"); 
    container.add(daysInWeekLabels[4], "4,0"); 

    setSize(780,600); //set size based on screen size 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    setResizable(false); //unresizable 
    setVisible(true); 
    } 

    public void paintComponent(Graphics g) { 
     super.paint(g); 
     Graphics2D g2 = (Graphics2D) g; 
     g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); 

     g2.drawLine(getWidth()/5,0,getWidth()/5,getHeight()); 
     g2.drawLine(getWidth()*2/5,0,getWidth()*2/5,getHeight()); 
     g2.drawLine(getWidth()*3/5,0,getWidth()*3/5,getHeight()); 
     g2.drawLine(getWidth()*4/5,0,getWidth()*5/5,getHeight()); 
    } 
} 

enter image description here

+0

'container.setLayout (новый TableLayout (размер));' Для лучшей помощи раньше, отправьте сообщение [MCVE] или [Short, Self Contained, Correct Example] (http://www.sscce.org/). –

+1

Изменить 'public void paintComponent (Графика g) {' to' @Override public void paintComponent (Графика g) {'для начала ответа. –

ответ

3

Там нет paintComponent() метод в JFrame. Всякий раз, когда вы пытаетесь переопределить метод, вы всегда должны использовать @Override перед именем метода. Вы получите ошибку компиляции, если вы не будете правильно переопределять метод.

Вы можете переопределить paint(), но в целом не пытайтесь делать обычную покраску в методе paint()JFrame.

Вместо этого обычная роспись выполняется путем переопределения метода панели, который вы добавляете к кадру, paintComponent().

Еще лучше вы можете использовать JTable, который уже предоставляет вам компонент на основе строки/столбца.