2016-08-21 7 views
-2

GridBagLayout을 사용하여 테이블을 만들려고하고 있는데 무엇이 잘못되었는지 알지 못합니다.GridBagLayout 테이블

import javax.swing.*; 
import java.awt.*; 

/** 
* Created by 20114283 on 8/21/2016. 
*/ 
public class TableGrid extends JFrame{ 

    JPanel p; 
    JTextField title; 
    JTextField t01; 
    JTextField t02; 
    JTextField t03; 
    JTextField t04; 
    JTextField t05; 
    JTextField t11; 
    JTextField t12; 
    JTextField t13; 
    JTextField t14; 
    JTextField t15; 
    JTextField t21; 
    JTextField t22; 
    JTextField t23; 
    JTextField t24; 
    JTextField t25; 
    JTextField t31; 
    JTextField t32; 
    JTextField t33; 
    JTextField t34; 
    JTextField t35; 

    public TableGrid(){ 
     createView(); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setVisible(true); 
     setResizable(false); 
     setTitle("Table"); 
     setSize(new Dimension(700,370)); 
     setLocationRelativeTo(null); 
    } 
    private void createView(){ 

     GridBagLayout layout = new GridBagLayout(); 
     layout.columnWidths = new int[] {140,200,180,180}; 
     layout.rowHeights = new int[] {80,100,50,50,50,50}; 
     p = new JPanel(layout); 
     this.getContentPane().add(p); 

     GridBagConstraints c = new GridBagConstraints(); 

     c.gridx = 0; 
     c.gridy = 0; 
     c.gridwidth = 4; 
     c.anchor = GridBagConstraints.CENTER; 
     p.add(title = new JTextField("Cooking Club Members Scores")); 

     //column 1 
     c.gridx = 0; 
     c.gridy = 1; 
     c.gridwidth = 1; 
     p.add(t01 = new JTextField("")); 

     c.gridx = 0; 
     c.gridy = 2; 
     c.gridwidth = 1; 
     p.add(t02 = new JTextField("Beth")); 

     c.gridx = 0; 
     c.gridy = 3; 
     c.gridwidth = 1; 
     p.add(t03 = new JTextField("Jon")); 

     c.gridx = 0; 
     c.gridy = 4; 
     c.gridwidth = 1; 
     p.add(t04 = new JTextField("Lupe")); 

     c.gridx = 0; 
     c.gridy = 5; 
     c.gridwidth = 1; 
     p.add(t05 = new JTextField("Amy")); 

     //column 2 

     c.gridx = 1; 
     c.gridy = 1; 
     c.gridwidth = 1; 
     p.add(t11 = new JTextField("Appetizer")); 

     c.gridx = 1; 
     c.gridy = 2; 
     c.gridwidth = 1; 
     p.add(t12 = new JTextField("25")); 

     c.gridx = 1; 
     c.gridy = 3; 
     c.gridwidth = 1; 
     p.add(t13 = new JTextField("35")); 

     c.gridx = 1; 
     c.gridy = 4; 
     c.gridwidth = 1; 
     p.add(t14 = new JTextField("20")); 

     c.gridx = 1; 
     c.gridy = 5; 
     c.gridwidth = 1; 
     p.add(t15 = new JTextField("40")); 


     //column 3 

     c.gridx = 2; 
     c.gridy = 1; 
     c.gridwidth = 1; 
     p.add(t21 = new JTextField("Main Course")); 

     c.gridx = 2; 
     c.gridy = 2; 
     c.gridwidth = 1; 
     p.add(t22 = new JTextField("38")); 

     c.gridx = 2; 
     c.gridy = 3; 
     c.gridwidth = 1; 
     p.add(t23 = new JTextField("29")); 

     c.gridx = 2; 
     c.gridy = 4; 
     c.gridwidth = 1; 
     p.add(t24 = new JTextField("31")); 


     c.gridx = 2; 
     c.gridy = 5; 
     c.gridwidth = 1; 
     p.add(t25 = new JTextField("32")); 

     //column 4 

     c.gridx = 3; 
     c.gridy = 1; 
     c.gridwidth = 1; 
     p.add(t31 = new JTextField("Dessert")); 

     c.gridx = 3; 
     c.gridy = 2; 
     c.gridwidth = 1; 
     p.add(t32 = new JTextField("28")); 

     c.gridx = 3; 
     c.gridy = 3; 
     c.gridwidth = 1; 
     p.add(t33 = new JTextField("37")); 

     c.gridx = 3; 
     c.gridy = 4; 
     c.gridwidth = 1; 
     p.add(t34 = new JTextField("39")); 

     c.gridx = 3; 
     c.gridy = 5; 
     c.gridwidth = 1; 
     p.add(t35 = new JTextField("36")); 


    } 

    public static void main(String[] args){ 
     new TableGrid(); 
    } 

} 
+0

스택 오버플로에 오신 것을 환영합니다! [둘러보기]를 가지고 둘러보고 [도움말], 특히 [* 좋은 질문을하는 방법 *] (/ help/how-to-ask)을 읽으십시오. 귀하의 질문의 끝은 유용하지 않습니다. 당신이하려는 일, 당신이 얻는 결과, 그 결과가 당신이 원하는 결과가 아닌 방법을 말하는 것이 유용합니다. 또한 사이트에서 보여준 미리보기와 다양한 서식 도구를 사용하십시오. –

답변

0

이 GUI를 만들기 위해 코드를 많이 수정했습니다.

Table GUI

는 여기에 내가 코드에 대한 변경 사항입니다.

  1. 메인 메서드에서 SwingUtilities invokeLater 메서드에 대한 호출을 추가했습니다. invokeLater 메서드는 Event Dispatch 스레드에 Swing 구성 요소의 생성과 사용을 지정합니다. 오라클과 나는 모든 스윙 애플리케이션을 Event Dispatch 스레드에서 시작한다고 주장한다.

  2. 나는 JFrame을 사용했다. 나는 JFrame을 확장하지 않았다. 하나 이상의 클래스 메소드를 대체하려는 경우 Swing 구성 요소 또는 Java 클래스를 확장해야하는 유일한 이유가 있습니다.

  3. JFrame 메서드 호출을 올바른 순서로 재정렬했습니다. TJe JFrame 메서드는이 순서로 호출되어야합니다.

  4. GridBagLayout을 만들 때 Swing 구성 요소를 열이 아닌 행으로 정렬합니다.

  5. GridBagLayout에 Swing 구성 요소를 추가 할 때 GridBagConstraints를 add 메소드에 추가해야합니다.

다음은 수정 된 코드입니다.

package com.ggl.testing; 

import java.awt.Dimension; 
import java.awt.GridBagConstraints; 
import java.awt.GridBagLayout; 

import javax.swing.BorderFactory; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JTextField; 
import javax.swing.SwingUtilities; 

/** 
* Created by 20114283 on 8/21/2016. 
*/ 
public class TableGrid implements Runnable { 

    JFrame frame; 

    JTextField title; 
    JTextField t01; 
    JTextField t02; 
    JTextField t03; 
    JTextField t04; 
    JTextField t05; 
    JTextField t11; 
    JTextField t12; 
    JTextField t13; 
    JTextField t14; 
    JTextField t15; 
    JTextField t21; 
    JTextField t22; 
    JTextField t23; 
    JTextField t24; 
    JTextField t25; 
    JTextField t31; 
    JTextField t32; 
    JTextField t33; 
    JTextField t34; 
    JTextField t35; 

    @Override 
    public void run() { 
     frame = new JFrame("Table"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     frame.add(createView()); 

     frame.pack(); 
     frame.setLocationByPlatform(true); 
     frame.setVisible(true); 
    } 

    private JPanel createView() { 
     JPanel panel = new JPanel(); 
     panel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10)); 
     panel.setLayout(new GridBagLayout()); 

     GridBagConstraints c = new GridBagConstraints(); 

     c.gridx = 0; 
     c.gridy = 0; 
     c.gridwidth = 4; 
     c.anchor = GridBagConstraints.CENTER; 
     panel.add(title = new JTextField("Cooking Club Members Scores"), c); 

     // row 1 
     c.gridx = 0; 
     c.gridy = 1; 
     c.gridwidth = 1; 
     panel.add(t01 = new JTextField(" "), c); 

     c.gridx = 1; 
     c.gridy = 1; 
     c.gridwidth = 1; 
     panel.add(t11 = new JTextField("Appetizer"), c); 

     c.gridx = 2; 
     c.gridy = 1; 
     c.gridwidth = 1; 
     panel.add(t21 = new JTextField("Main Course"), c); 

     c.gridx = 3; 
     c.gridy = 1; 
     c.gridwidth = 1; 
     panel.add(t31 = new JTextField("Dessert"), c); 

     // row 2 
     c.gridx = 0; 
     c.gridy = 2; 
     c.gridwidth = 1; 
     panel.add(t02 = new JTextField("Beth"), c); 

     c.gridx = 1; 
     c.gridy = 2; 
     c.gridwidth = 1; 
     panel.add(t12 = new JTextField("25"), c); 

     c.gridx = 2; 
     c.gridy = 2; 
     c.gridwidth = 1; 
     panel.add(t22 = new JTextField("38"), c); 

     c.gridx = 3; 
     c.gridy = 2; 
     c.gridwidth = 1; 
     panel.add(t32 = new JTextField("28"), c); 

     // row 3 
     c.gridx = 0; 
     c.gridy = 3; 
     c.gridwidth = 1; 
     panel.add(t03 = new JTextField("Jon"), c); 

     c.gridx = 1; 
     c.gridy = 3; 
     c.gridwidth = 1; 
     panel.add(t13 = new JTextField("35"), c); 

     c.gridx = 2; 
     c.gridy = 3; 
     c.gridwidth = 1; 
     panel.add(t23 = new JTextField("29"), c); 

     c.gridx = 3; 
     c.gridy = 3; 
     c.gridwidth = 1; 
     panel.add(t33 = new JTextField("37"), c); 

     // row 4 
     c.gridx = 0; 
     c.gridy = 4; 
     c.gridwidth = 1; 
     panel.add(t04 = new JTextField("Lupe"), c); 

     c.gridx = 1; 
     c.gridy = 4; 
     c.gridwidth = 1; 
     panel.add(t14 = new JTextField("20"), c); 

     c.gridx = 2; 
     c.gridy = 4; 
     c.gridwidth = 1; 
     panel.add(t24 = new JTextField("31"), c); 

     c.gridx = 3; 
     c.gridy = 4; 
     c.gridwidth = 1; 
     panel.add(t34 = new JTextField("39"), c); 

     // row 5 
     c.gridx = 0; 
     c.gridy = 5; 
     c.gridwidth = 1; 
     panel.add(t05 = new JTextField("Amy"), c); 

     c.gridx = 1; 
     c.gridy = 5; 
     c.gridwidth = 1; 
     panel.add(t15 = new JTextField("40"), c); 

     c.gridx = 2; 
     c.gridy = 5; 
     c.gridwidth = 1; 
     panel.add(t25 = new JTextField("32"), c); 

     c.gridx = 3; 
     c.gridy = 5; 
     c.gridwidth = 1; 
     panel.add(t35 = new JTextField("36"), c); 

     return panel; 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new TableGrid()); 
    } 

} 
+0

omg 고맙습니다. – wolowiz68

+0

이 GUI를 더 세련되고 전문적으로 보이게 할 수있는 방법을 보여줄 수 있습니까? – wolowiz68

+0

@ wolowiz68 : 열 머리글에 국한되지만 [JTable] (https://docs.oracle.com/javase/tutorial/uiswing/components/table.html)이 더보기 쉬울 것입니다. 제목을 JLabel에 넣어야합니다. JTextFields를 고수하고 싶다면, 수평 채우기를 사용하면 JTextField가 짝수 일 것입니다. –