example - table in java




über die Spaltenbreite einer JTable in einem JScrollPane (4)

Ich möchte jede Spalte einer JTable in einem JScrollPane mit einer festen Num-Breite setzen, aber ich kann es nicht mit infoTable.getColumnModel().getColumn(0).setPreferredWidth(10); tun infoTable.getColumnModel().getColumn(0).setPreferredWidth(10); Ich benutze das Standard-Layout von JScrollPane und füge die Tabelle mit dem setViewPortView (infoTable) von scrollPane in j2se 1.4 hinzu. Wie kann ich das schaffen? Hier ist mein Code

private javax.swing.JButton jButton1;
private javax.swing.JScrollPane jScrollPane1;
public TableFrame() {

    jScrollPane1 = new javax.swing.JScrollPane();
    jButton1 = new javax.swing.JButton();

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

    jScrollPane1.setBorder(javax.swing.BorderFactory.createLineBorder(
        new java.awt.Color(0, 0, 0)));

    jButton1.setText("jButton1");
    jButton1.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            jButton1ActionPerformed(evt);
        }
    });

    this.setSize(new Dimension(600, 600));
    this.jScrollPane1.setSize(500, 500);
    this.getContentPane().add(this.jScrollPane1, BorderLayout.CENTER);
    this.getContentPane().add(this.jButton1, BorderLayout.WEST);
    table = new JTable(new javax.swing.table.DefaultTableModel(100, 2));
    this.jScrollPane1.setViewportView(table);
    table.getColumnModel().getColumn(0).setWidth(10);
}

ps. Thx für die Antwort Ich brauche die Spalte kann gezogen werden, um die Größe zu ändern, so kann ich nicht die maximale und minimale Größe einstellen


Beachten Sie, dass setWidth() "nicht verwendet werden sollte, um die Breite von Spalten in der JTable festzulegen, setPreferredWidth() ." Vermeiden Sie außerdem mehrere widersprüchliche Einschränkungen. Zu viele werden deine Absicht durcheinander bringen. Oft reicht ein einzelner setPreferredSize() , wie unten vorgeschlagen.

Beachten Sie, dass einige Funktionen zur Betonung geändert wurden.

http://i38.tinypic.com/7281tt.png http://i38.tinypic.com/7281tt.png

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

/** @see http://.com/questions/3448030 */
public class TablePanel extends JPanel {

    private JButton button = new JButton("Button");
    private JTable table = new JTable(new DefaultTableModel(100, 2));
    private javax.swing.JScrollPane jsp = new JScrollPane(table);

    public TablePanel() {
        super(new BorderLayout());
        button.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                System.out.println(e);
            }
        });
        JPanel panel = new JPanel();
        panel.add(button);
        this.add(panel, BorderLayout.WEST);

        jsp.setBorder(BorderFactory.createLineBorder(Color.red));
        jsp.getViewport().setPreferredSize(new Dimension(500, 500));
        this.add(jsp, BorderLayout.CENTER);
        table.getColumnModel().getColumn(0).setPreferredWidth(6);
        table.setGridColor(Color.gray);
    }

    private void display() {
        JFrame f = new JFrame("TablePanel");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.add(this);
        f.pack();
        f.setLocationRelativeTo(null);
        f.setVisible(true);
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                new TablePanel().display();
            }
        });
    }
}

Benutzen:

setWidth(int i) 

in Verbindung mit:

setMaxWidth(int i)
setMinWidth(int i)

Verwenden Sie diese Option nur dann, wenn Sie eine feste Breite für die Spalte festlegen möchten und diese auch dann beibehalten soll, wenn die Größe oder Position der Tabelle geändert wird.

setPreferredWidth(10) ist nur eine Empfehlung an den Layout-Manager.


Legen Sie auch die minimale und maximale Breite der Spalte fest, die mit setPreferredWidth festgelegt wurde.

infoTable.getColumnModel().getColumn(0).setMinWidth(10);
infoTable.getColumnModel().getColumn(0).setMaxWidth(10);
infoTable.getColumnModel().getColumn(0).setPreferredWidth(10);

Wie von den anderen Mitwirkenden gesagt, müssen Sie bevorzugte, minimale und maximale Breiten festlegen. Hier finden Sie ein Beispiel, in dem Spalte 0 wächst und Spalte 1 eine feste Breite hat:

table.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
final int COLUMN_0_WIDTH = 650;
final int COLUMN_1_WIDTH = 200;
table.getColumnModel().getColumn(0).setPreferredWidth(COLUMN_0_WIDTH);
table.getColumnModel().getColumn(0).setMinWidth(COLUMN_0_WIDTH);
table.getColumnModel().getColumn(0).setMaxWidth(COLUMN_0_WIDTH*3);

table.getColumnModel().getColumn(1).setPreferredWidth(COLUMN_1_WIDTH);
table.getColumnModel().getColumn(1).setMinWidth(COLUMN_1_WIDTH);
table.getColumnModel().getColumn(1).setMaxWidth(COLUMN_1_WIDTH);