2016-08-21 3 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

Я сильно изменил ваш код для создания этого графического интерфейса.

Table GUI

Вот изменения, которые я сделал в свой код.

  1. Я добавил вызов метода SwingUtilities invokeLater в ваш основной метод. Метод invokeLater помещает создание и использование компонентов Swing в поток Event Dispatch. Oracle и я настаиваем на том, чтобы вы запускали все приложения Swing в потоке Dispatch.

  2. Я использовал JFrame. Я не расширил JFrame. Единственная причина, по которой вы могли бы расширить компонент Swing или любой класс Java, - это если вы хотите переопределить один или несколько методов класса.

  3. Я переупорядочил вызовы метода JFrame в надлежащем порядке. В этом порядке должны быть вызваны методы Tje JFrame.

  4. При создании GridBagLayout вы упорядочиваете компоненты Swing в строках, а не в столбцах.

  5. При добавлении компонента Swing в GridBagLayout вам необходимо добавить GridBagConstraints к методу добавления.

Вот скорректированный код.

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

Можете ли вы показать мне, как сделать этот графический интерфейс более гладким и профессиональным? – wolowiz68

+0

@ wolowiz68: [JTable] (https://docs.oracle.com/javase/tutorial/uiswing/components/table.html), вероятно, будет выглядеть лучше, хотя вы ограничены заголовками столбцов. Вам нужно будет поместить заголовок в JLabel. Если вы хотите придерживаться JTextFields, использование горизонтальной заливки приведет к выравниванию JTextFields. –

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