N 行と 2 列を含む Panel を作成しようとしています。最初の列は可変長のラベルですが、特定の制限内 (言語によって長さが異なります) であり、2 番目の列には非常に長い可能性のあるフィールドが含まれています。文章。
NetBeans を使用して GridBagLayout を試してみましたが、パネルをスケーリングしたり、非常に長いフィールドを追加したりすると、結果が乱雑になります。JPanel のスクリーンショットの下で、私の意味を確認してください。
左の列を左の境界線から離し、最初の列を最も長いラベルよりも小さい値にサイズ変更しないようにしたい (ラベルは常に読み取り可能でなければならない)、2 番目の列は利用可能な水平方向のスペースまで視覚化し、次に、ドットを表示します(テキストをトリミングしません)。
また退屈なのは、向きを NorthWest と定義したにもかかわらず、パネルが中央に垂直に配置されていることです。
編集: TableColumnAdjuster を使用して、マウスで値を選択できるように、値のラベルの代わりにテーブル行を使用しました。私はまだ行を持っていますが、含まれているパネルの長さではなく、テキストの長さに適合しています:
public class TestPanel extends JPanel
{
private static ArrayList<String> columnNames = new ArrayList<>();
static JTable table;
MyTableModel myTableModel = new MyTableModel();
static class MyTableModel extends AbstractTableModel
{
private String[] columnNames =
{
"Name", "Value"
};
private Object[][] data =
{
{ "Subject", "very very very very very very very very very very very very very very very very long subject"},
{ "Date", "" },
{ "Location", "" },
{ "Status", "" },
{ "Notes", "" }
};
@Override
public int getColumnCount()
{ return columnNames.length; }
@Override
public int getRowCount()
{ return data.length; }
@Override
public String getColumnName(int col)
{ return columnNames[col]; }
@Override
public Object getValueAt(int row, int col)
{ return data[row][col]; }
@Override
public Class getColumnClass(int c)
{ return getValueAt(0, c).getClass(); }
@Override
public boolean isCellEditable(int row, int col)
{ return false; }
@Override
public void setValueAt(Object value, int row, int col)
{ }
}
public TestPanel()
{
table = new JTable(myTableModel);
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
TableColumnAdjuster tca = new TableColumnAdjuster(table);
tca.adjustColumns();
JPanel panel = new JPanel(new GridBagLayout());
panel.add(table);
GridBagConstraints constraints = new GridBagConstraints();
constraints.weighty = 1.0;
constraints.fill = GridBagConstraints.VERTICAL;
panel.add(Box.createGlue(), constraints);
add(panel);
}
public static void main(String args[])
{
JFrame frame = new JFrame();
frame.setContentPane(new TestPanel());
frame.setSize(300, 800);
frame.setVisible(true);
}
}
TableColumnAdjuster はTableColumnAdjusterからのものですが、私が得るものはまだ以下の通りです