Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: GUI и Java FX приложения > column in JTable


Автор: LAKERS 12.5.2006, 15:22
создал таблицу на 8 столбцов и 16 строк, как мне задать ширину второго столбца нужного размера, а не по умолчанию как все..? или лучше каждого столбца в отдельности?

Код

import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.*;
import java.lang.*;
import java.text.*;
import javax.swing.*;
import javax.swing.table.*;

public class football extends JFrame {

    public football() {
        
        setTitle("Football 2006");
        
        addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });

        String[] columnNames = {"#",
                                "Team",
                                "G",
                                "W",
                                "T",
                "L",
                "  ",
                "P"};

        Object[][] data = {
            {new Integer(1), "CSKA",
              new Integer(1), new Integer(1), new Integer(1), new Integer(1), new Integer(1), new Integer(1)},
            {new Integer(1), "Lokomotiv",
              new Integer(1), new Integer(1), new Integer(1), new Integer(1), new Integer(1), new Integer(1)},
            {new Integer(1), "Spartak",
              new Integer(1), new Integer(1), new Integer(1), new Integer(1), new Integer(1), new Integer(1)},
            {new Integer(1), "Zenit",
              new Integer(1), new Integer(1), new Integer(1), new Integer(1), new Integer(1), new Integer(1)},
            {new Integer(1), "Rubin",
              new Integer(1), new Integer(1), new Integer(1), new Integer(1), new Integer(1), new Integer(1)},
        {new Integer(1), "FK Tom",
              new Integer(1), new Integer(1), new Integer(1), new Integer(1), new Integer(1), new Integer(1)},
        {new Integer(1), "Moskow",
              new Integer(1), new Integer(1), new Integer(1), new Integer(1), new Integer(1), new Integer(1)},
        {new Integer(1), "Amkar",
              new Integer(1), new Integer(1), new Integer(1), new Integer(1), new Integer(1), new Integer(1)},
        {new Integer(1), "Saturn",
              new Integer(1), new Integer(1), new Integer(1), new Integer(1), new Integer(1), new Integer(1)},
        {new Integer(1), "Rostov",
              new Integer(1), new Integer(1), new Integer(1), new Integer(1), new Integer(1), new Integer(1)},
        {new Integer(1), "Dinamo",
              new Integer(1), new Integer(1), new Integer(1), new Integer(1), new Integer(1), new Integer(1)},
        {new Integer(1), "L.Energy",
              new Integer(1), new Integer(1), new Integer(1), new Integer(1), new Integer(1), new Integer(1)},
        {new Integer(1), "Shinnik",
              new Integer(1), new Integer(1), new Integer(1), new Integer(1), new Integer(1), new Integer(1)},
        {new Integer(1), "Spartak N",
              new Integer(1), new Integer(1), new Integer(1), new Integer(1), new Integer(1), new Integer(1)},
        {new Integer(1), "Torpedo",
              new Integer(1), new Integer(1), new Integer(1), new Integer(1), new Integer(1), new Integer(1)},
        {new Integer(1), "K.Sovetov",
              new Integer(1), new Integer(1), new Integer(1), new Integer(1), new Integer(1), new Integer(1)},
        };

        final JTable table = new JTable(data, columnNames);
        //table.setPreferredScrollableViewportSize(new Dimension(500, 70));
    //table.setRowHeight(15);
    TableColumn column = new TableColumn();
    column.setPreferredWidth(9);
    //table.setAutoResizeMode(AUTO_RESIZE_ALL_COLUMNS);
    //AUTO_RESIZE_ALL_COLUMNS; 

    
        JScrollPane scrollPane = new JScrollPane(table);
        getContentPane().add(scrollPane);
    }

    public static void main(String[] args) {
       JFrame f = new football();
       f.setSize(220, 300);
       f.show();
            }

}


 

Автор: powerOn 12.5.2006, 15:44
Используй: 
Код

jTable1.getColumn("Title 1").setPreferredWidth(10000);
 

Автор: LAKERS 15.5.2006, 11:38
что-то ширину сток меняет замечательно а отдельные столбцы по приведенному выше коду не меняет почему-то... 

Автор: powerOn 15.5.2006, 12:00
Цитата(LAKERS @  15.5.2006,  12:38 Найти цитируемый пост)
что-то ширину сток меняет замечательно а отдельные столбцы по приведенному выше коду не меняет почему-то...  


строка 73 и 74.
Цитата

TableColumn column = new TableColumn();
column.setPreferredWidth(9);


Ты создал объект Столбец и поменял его ширину. Только этот объект нигде не используется.

Нужно сначало получить столбец таблицы, а потом менять его ширину. Нипример: 
Код

TableColumn column = table.getColumn("Team");
column.setPreferredWidth(100);


  

Автор: LAKERS 15.5.2006, 12:23
а нельзя не создавать TableColumn вообще, а сделать так?

Код

        JTable t1 = new JTable(data, columnNames);
    t1.setFont(new Font("Helvetica", Font.PLAIN, 9));
    t1.getColumn("#").setPreferredWidth(1);
    t1.getColumn("Team").setPreferredWidth(30);
    t1.getColumn("G").setPreferredWidth(1);
    t1.getColumn("W").setPreferredWidth(1);
    t1.getColumn("T").setPreferredWidth(1);
    t1.getColumn("L").setPreferredWidth(1);
    t1.getColumn(" ").setPreferredWidth(10);
    t1.getColumn("P").setPreferredWidth(1);
    
    t1.setRowHeight(13);


Добавлено @ 12:32 
у меня такое ощущение что если ширина всех столбцов превышает ширину  f.setSize(220, 300);, то тогда устанавливаются значения. а если меньше, то ставятся по умолчанию что-ли... :-( 

Автор: powerOn 15.5.2006, 12:32

Цитата(LAKERS @  15.5.2006,  13:23 Найти цитируемый пост)
а нельзя не создавать TableColumn вообще, а сделать так?

??? Так ведь:

Цитата(MoonCat @  12.5.2006,  16:44 Найти цитируемый пост)
Используй: 
код Java
    
jTable1.getColumn("Title 1").setPreferredWidth(10000);



 

Автор: LAKERS 15.5.2006, 12:34
вот так тоже не хочет...

Код

       JTable t1 = new JTable(data, columnNames);
    TableColumn c1 = t1.getColumn("#");
    TableColumn c2 = t1.getColumn("Team");
    TableColumn c3 = t1.getColumn("G");
    TableColumn c4 = t1.getColumn("W");
    TableColumn c5 = t1.getColumn("T");
    TableColumn c6 = t1.getColumn("L");
    TableColumn c7 = t1.getColumn(" ");
    TableColumn c8 = t1.getColumn("P");

    t1.setFont(new Font("Helvetica", Font.PLAIN, 9));
    c1.setPreferredWidth(1);
    c2.setPreferredWidth(5);
    c3.setPreferredWidth(1);
    c4.setPreferredWidth(1);
    c5.setPreferredWidth(1);
    c6.setPreferredWidth(1);
    c7.setPreferredWidth(1);
    c8.setPreferredWidth(1);


Добавлено @ 12:36 
Цитата(MoonCat @ 15.5.2006,  12:32)
Цитата(LAKERS @  15.5.2006,  13:23 Найти цитируемый пост)
а нельзя не создавать TableColumn вообще, а сделать так?

??? Так ведь:

Цитата(MoonCat @  12.5.2006,  16:44 Найти цитируемый пост)
Используй: 
код Java
    
jTable1.getColumn("Title 1").setPreferredWidth(10000);






Код

        JTable t1 = new JTable(data, columnNames);

    t1.getColumn("#").setPreferredWidth(1);
    t1.getColumn("Team").setPreferredWidth(30);
    t1.getColumn("G").setPreferredWidth(1);
    t1.getColumn("W").setPreferredWidth(1);
    t1.getColumn("T").setPreferredWidth(1);
    t1.getColumn("L").setPreferredWidth(1);
    t1.getColumn(" ").setPreferredWidth(10);
    t1.getColumn("P").setPreferredWidth(1);


именно так и не хочет.... 

Автор: powerOn 15.5.2006, 12:45
Нельзя устанавливаль ширину столбца меньшую, чем  getMinWidth() и большую чем getMaxWidth(). 

Автор: zone51 23.5.2006, 13:49
Доброго времени суток! Скажите, а как реализовать на яве квадратную  матрицу, причем в ячейки можно вводить значения? Пробовал JTable, но нельзя поменять размеры строк и столбцов, чтоб все одинаковае были, какой компонент использовать? Спасибо 

Автор: BlodTor 23.5.2006, 15:33
JTable использовать. 
Посмотри примеры о JTable например тут: http://java.sun.com/docs/books/tutorial/uiswing/components/table.html
поменять размеры строк и столбцов, чтоб все одинаковае были тоже можно.
Самый простой способ:
Код

...
Object title [] = {"0","1","2"};
Object val[][]=  {{"0","1","0"},
                   {"0","1","0"},
               {"0","1","0"}};
JTable jTable = new JTable(val,title);
jTable.setRowHeight(50);
jTable.getColumn("0").setMaxWidth(50);
jTable.getColumn("1").setMaxWidth(50);
jTable.getColumn("2").setMaxWidth(50);
...

А вообще из JTable можно сотворить что угодно. Просто надо его пощупать (вернее его модели). 

Автор: powerOn 23.5.2006, 17:01
Цитата(BlodTor @  23.5.2006,  16:33 Найти цитируемый пост)
.... (вернее его модели).  


Угу. И рендереры. 

Автор: zone51 25.5.2006, 18:09
Скажите а как сделать чтоб выравнивание шло не только при отображении ячейки но и при вводе туда значений? То есть ввожу цифру, а оно сразу налево тянется. Спасибо. 

Автор: powerOn 25.5.2006, 20:01
Если у тебя editor для ячейки JTextField, то установи его свойство HorizontalAlignment:

setHorizontalAlignment(javax.swing.JTextField.LEFT); 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)