java example über die Spaltenbreite einer JTable in einem JScrollPane




table in java (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();
            }
        });
    }
}

Im Allgemeinen müssen Sie nur die bevorzugte Breite einstellen. Um Ihr Ziel zu erreichen, müssen Sie zuerst die Standardbreiten kennen und wissen, wie sie zur Bestimmung der tatsächlichen Standardgröße verwendet werden:

min = 15  
preferred = 75  
max = Integer.MAX_VALUE

Sie können also 10 nicht verwenden, wenn Sie nicht auch die Mindestbreite ändern.

Nehmen wir einen einfachen Fall, in dem die bevorzugte Breite 25 für Spalte 1 und die Bildlauffläche 500 beträgt. Daher ist die bevorzugte Breite der zwei Spalten 100 (25 + 75). Die zusätzlichen 400 Pixel werden gleichmäßig zwischen den zwei Spalten verteilt, so dass die Spalten bei 225 (25 + 200) und 275 (75 + 200) angezeigt werden. Daher können Sie die erste Spalte standardmäßig nicht mit 25 Pixel anzeigen, es sei denn, Sie legen auch die zweite Spalte auf 475 fest.

Wenn Sie möchten, dass alle Spalten in ihrer bevorzugten Breite angezeigt werden, müssen Sie Folgendes verwenden:

table.setAutoResizeMode( JTable.AUTO_RESIZE_OFF );

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.


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);