我有一个ToolBar,我需要在屏幕左侧放置一系列jbutton和jlabel,但在右侧放置一个按钮。我不能向右移动最后一个。
this.panelControl=new JToolBar();
setLayout(new FlowLayout(FlowLayout.LEFT)); //i use it to move them to the left, probably wrong
panelControl.add(load);
panelControl.addSeparator();
panelControl.add(laws);
panelControl.addSeparator();
panelControl.add(play);
panelControl.add(stop);
panelControl.add(labelSteps);
panelControl.add(steps);
panelControl.add(labelTime);
panelControl.add(time);
panelControl.add(exit); // i need this to be in the right side, but i can't
this.add(panelControl);
非常感谢您。
答案 0 :(得分:0)
使用JToolBar自己的布局,但在最后两个按钮之间添加水平胶水。这将为您节省空间。例如:
import java.awt.BorderLayout;
import java.awt.Dimension;
import javax.swing.*;
@SuppressWarnings("serial")
public class BoxLayoutEg extends JPanel {
public BoxLayoutEg() {
String[] btnTexts = {"One", "Two", "Three", "Four", "Five", "Exit"};
JToolBar toolBar = new JToolBar();
for (int i = 0; i < btnTexts.length; i++) {
JButton button = new JButton(btnTexts[i]);
if (i != btnTexts.length - 1) {
toolBar.add(button);
toolBar.addSeparator();
} else {
toolBar.add(Box.createHorizontalGlue());
toolBar.add(button);
}
}
setLayout(new BorderLayout());
add(toolBar, BorderLayout.PAGE_START);
setPreferredSize(new Dimension(400, 300));
}
private static void createAndShowGui() {
BoxLayoutEg mainPanel = new BoxLayoutEg();
JFrame frame = new JFrame("BoxLayout Example");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(mainPanel);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> createAndShowGui());
}
}
根据VGR的评论:
最好使用createGlue(),这样即使JToolBar是可浮动的,并且用户可以垂直浮动和重新放置,也可以保留拉伸的布局。
他是对的。所以改变这个:
} else {
toolBar.add(Box.createHorizontalGlue());
toolBar.add(button);
}
对此:
} else {
toolBar.add(Box.createGlue());
toolBar.add(button);
}
即使工具栏处于垂直位置,分隔也能持续
还请注意,如果您需要限制JTextField的大小,则可以将其最大大小设置为其首选大小,例如
} else {
int columns = 10;
JTextField time = new JTextField(columns);
time.setMaximumSize(time.getPreferredSize());
toolBar.add(time);
toolBar.add(Box.createHorizontalGlue());
toolBar.add(button);
}