我一直在研究一個 GUI,其中最基本的有兩個面板,其中一個充當包含第二個的表的標題。我正在使用兩個面板,因為在某些情況下可能有很多行,因此第二個面板通過 Jscrollbar。這會產生“粘性”頂行的效果,并且能夠滾動底行。還值得注意的是,第二個面板的組件是 JLabels、JCheckBoxs 和 JTextAreas。
所有這一切都說明我的問題是我找不到讓標簽和資料對齊的方法。我在 MigLayout 中使用組件約束和列約束嘗試了許多不同的方法,但均無濟于事。有人對我如何實作這一目標有任何想法嗎?
以下是它現在的樣子:

這也是我的代碼:
public class help implements ActionListener {
public help(ArrayList<Integer> in){
fighters = in;
frame = new JFrame();
frame.setTitle("");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
MigLayout layout = new MigLayout(
"wrap 9",
"[175, grow] [175, grow] [175, grow] [175, grow] [175, grow] [175, grow] [175, grow] "
"[175, grow] [175, grow]",
""
);
MigLayout layout2 = new MigLayout(
"wrap 9",
"[grow] [grow] [grow] [grow] [grow] [grow] [grow, fill] "
"[grow] [grow]",
""
);
JPanel panel = new JPanel(layout2);
JPanel top = new JPanel(layout2);
data = new Component[in.size()][9];
for (int i = 0; i < in.size(); i ) {
data[i][7] = new JLabel("Label 1 Row " i);
panel.add(data[i][7]);
data[i][0] = new JLabel();
panel.add(data[i][0]);
data[i][1] = new JLabel("Label 2 Row " i);
panel.add(data[i][1]);
data[i][2] = new JLabel("Label 3 Row " i);
panel.add(data[i][2]);
data[i][3] = new JLabel("Label 4 Row " i);
panel.add(data[i][3]);
data[i][4] = new JLabel("Label 5 Row " i);
panel.add(data[i][4]);
data[i][5] = new JCheckBox();
JCheckBox a = (JCheckBox) data[i][5];
a.addActionListener(this);
panel.add(data[i][5]);
data[i][6] = new JCheckBox();
JCheckBox r = (JCheckBox) data[i][6];
r.addActionListener(this);
panel.add(data[i][6]);
data[i][8] = new JTextArea("", 5, 20);
panel.add(data[i][8]);
}
top.add((new JLabel("Label 1")));
top.add(new JLabel("Label 2"));
top.add(new JLabel("Label 3"));
top.add(new JLabel("Label 4"));
top.add(new JLabel("Label 5"));
top.add(new JLabel("Label 6"));
top.add(new JLabel("Label 7"));
top.add(new JLabel("Label 8"));
top.add(new JLabel("Label 9"));
scrollBar = new JScrollPane(panel);
scrollBar.setPreferredSize(new Dimension(1000, 600));
scrollBar.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED);
scrollBar.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
frame.add(top, BorderLayout.NORTH);
frame.add(scrollBar);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
}
}
主類:
public class Main {
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList<>();
for (int i = 0; i < 50; i ) {
list.add(i);
}
new help(list);
}
}
uj5u.com熱心網友回復:
有人對我如何實作這一目標有任何想法嗎?
![]()
這對于JTable.
忘記所有面板和布局并創建一個TableModel代表列名和資料的。將模型添加到表的建構式中。根據需要為列創建適當的渲染器和編輯器(單選按鈕、復選框、組合框、文本欄位和區域等)。
將表格配置為自動排序,您將為用戶提供使用布局無法實作的功能。
有關上述所有內容的更多詳細資訊,請參見
我不確切知道你想做什么,但也許 JTable 可以幫助你!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/466368.html
