Я стал фанатом what @SplungeBob showed me давным-давно. Ниже приведен фрагмент кода дает вам представление о том, что нужно для выполнения графического интерфейса, показанного ниже.
frame.add(menu, new GBConstraints(0, 0).spanX(32).fill(HORIZONTAL));
frame.add(new JLabel("Available letters"),
new GBConstraints(0, 1).insets(2, 2, 0, 2));
frame.add(new JLabel("Play by play..."),
new GBConstraints(2, 1).insets(0, 5, 0, 0));
frame.add(pnlPlays, new GBConstraints(2, 1).insets(10, 0, 0, 0).spanY(14).anchor(WEST).fill(BOTH));//.ipad(0,0));
frame.add(pnlAvail, new GBConstraints(0, 2).insets(0, 5, 5, 5));
frame.add(pnlLegend, new GBConstraints(1, 2) .spanY(14) .fill(BOTH));
frame.add(pnlBonuses, new GBConstraints(0, 3).insets(0, 100, 0, 0));
frame.add(pnlSBBonuses, new GBConstraints(0, 3).insets(0, 125, 0, 0));
frame.add(gamePanel, new GBConstraints(0, 5).insets(0, 50, 0, 0));
frame.add(pnlTheScore, new GBConstraints(0, 5) .anchor(EAST));
btnDebug.setPreferredSize(new Dimension(1, 1));
frame.add(btnDebug, new GBConstraints(0, 0) .anchor(WEST));
frame.add(btnNextReplayStep,new GBConstraints(0, 6).insets(0,310, 0, 0) .anchor(CENTER));
btnNextReplayStep.setVisible(false);
frame.add(new JLabel("User letters"),
new GBConstraints(0, 6).insets(0,240, 30, 0));
frame.add(btnCopyUser, new GBConstraints(0, 6).insets(0,310,0,0) .anchor(CENTER));
frame.add(btnCopyAllLetters,new GBConstraints(0, 6) .anchor(EAST));
frame.add(pnlNotes, new GBConstraints(0, 6).insets(25,10,10, 10).spanY( 2).anchor(WEST));
frame.add(btnClearMnemHi, new GBConstraints(0, 7).insets(0,430, 0, 0));
frame.add(btnClearBorders, new GBConstraints(0, 7).insets(0,530, 0, 0));
я не буду лежать; это может быть важной задачей, но при тщательном планировании с реальной сеткой, помеченной вертикальными и горизонтальными линиями, чтобы показать, например, сколько столбцов должно быть поле span
, стоит попробовать. И шансы превосходны, что то, что предлагает @Hovercraft, еще лучше.
(я не осилил его, кажется, как странные insets
значения, кажется, указывают. Но это симпатичный надежный GUI.)
EDIT
Вот код для того, как два Объекты JPanel
были созданы до выполнения вышеуказанного кода. Также используется GridBagLayout
; другой нет. Только то, что работает проще всего и лучше.
private void makePlays(){
pnlPlays = new JPanel(new GridBagLayout());
pnlPlays.setSize(500,300);
pnlPlays.add(scrPlays, new GBConstraints(0,1).span(40, 62)
.fill(BOTH).ipad(100, 50));
scrPlays.setEnabled(false);
}
private void makeScoremasterBonuses(){
BonusBackgroundColors c;
BonusBackgroundColors all [] = BonusBackgroundColors.values();
String labels[] = new String[all.length];
String abbrs [] = new String[all.length];
JButton but;
pnlBonuses = new JPanel();
pnlBonuses.add(new JLabel("Legend:"));
for (int i = 0; i < all.length; i++) {
labels[i] = all[i].name().replace("_", " ").toLowerCase();
abbrs [i] = Utilities.abbreviate(all[i].name());
c = BonusBackgroundColors.values()[i];
but = new JButton(abbrs[i]);
but.setToolTipText(labels[i]);
but.setBackground(c.background(c));
but.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
but.setActionCommand("" + i);
but.addActionListener(this);
pnlBonuses.add(but);
}
}
1) изучите использование менеджера макетов MigLayout, который вам нужно будет загрузить. 2), или если вы хотите, чтобы наша помощь помогла вам оптимизировать GridBagLayout или любые другие макеты, вернитесь сюда с кодом, желательно [mcve] и с изображениями ваших желаемых и наблюдаемых графических интерфейсов. –
Редактировать - Нашли ссылки для скачивания, но не знаете, какой из них скачать, так много версий. –