3

infoTable.getColumnModel().getColumn(0).setPreferredWidth(10); 固定番号幅のJScrollPaneでJTableの各列を設定したいのですが、JScrollPaneのデフォルトのレイアウトを使用して、j2se 1.4でscrollPaneのsetViewPortView(infoTable)を使用してテーブルを追加することはできません。どうすればこれを行うことができますか?これが私のコードです

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列をドラッグしてサイズを変更できる必要があるため、最大サイズと最小サイズを設定できません

4

5 に答える 5

8

また、setPreferredWidthで設定したのと同じように、列の最小幅と最大幅を設定します。

infoTable.getColumnModel().getColumn(0).setMinWidth(10);
infoTable.getColumnModel().getColumn(0).setMaxWidth(10);
infoTable.getColumnModel().getColumn(0).setPreferredWidth(10);
于 2010-08-10T10:50:27.320 に答える
5

一般的には、希望する幅を設定するだけで済みます。ただし、目標を達成するには、最初にデフォルトの幅と、実際のデフォルトのサイズを決定するためにそれらがどのように使用されるかを知る必要があります。

min = 15  
preferred = 75  
max = Integer.MAX_VALUE

したがって、最小幅も変更しない限り、10を使用することはできません。

列1の優先幅が25で、スクロールペインが500である単純なケースを考えてみましょう。したがって、2つの列の優先幅は100(25 + 75)です。余分な400ピクセルは、2つの列の間に均等に割り当てられるため、列は225(25 + 200)と275(75 + 200)で表示されます。したがって、デフォルトでは、2番目の列も475に設定しない限り、最初の列を25ピクセルで表示することはできません。

すべての列を希望の幅で表示する場合は、次を使用する必要があります。

table.setAutoResizeMode( JTable.AUTO_RESIZE_OFF );
于 2010-08-10T15:58:20.680 に答える
1

setWidth()「JTableの列の幅を設定するために使用するべきではなく、setPreferredWidth()代わりに使用する」ことに注意してください。また、複数の競合する制約を回避します。多すぎるとあなたの意図が混乱します。多くの場合、以下に示すように、シングルsetPreferredSize()で十分です。

強調のためにいくつかの機能が変更されていることに注意してください。

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

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

/** @see http://stackoverflow.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();
            }
        });
    }
}
于 2010-08-10T12:14:33.183 に答える
0

使用する:

setWidth(int i) 

と組み合わせて:

setMaxWidth(int i)
setMinWidth(int i)

これは、列に固定幅を設定し、テーブルのサイズや場所が変更されてもその幅を維持したい場合にのみ使用してください。

setPreferredWidth(10)レイアウトマネージャーへの推奨事項にすぎません。

于 2010-08-10T10:40:02.747 に答える
0

他の寄稿者が言ったように、優先幅、最小幅、最大幅を設定する必要があります。ここでは、列0が大きくなり、列1の幅が固定されている例を見つけることができます。

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);
于 2014-11-20T09:05:10.507 に答える