在 GridBagLayout 中的组件之间放置 space
Putting space between components in GridBagLayout
我有一个 JPanel
,其中包含两个 JToggleButtons
。该面板有一个 GridBagLayout
并且有 1 行和 2 列。按钮位于同一行,但不同列。
class UserInterfacePanel extends JPanel {
private JToggleButton startButton;
private JToggleButton stopButton;
public UserInterfacePanel() {
setup();
}
private void setup() {
setLayout(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
setupButtons();
//setupButtonsActions();
c.insets=new Insets(3,3,3,3);
c.weightx=0.5; //c.weightx=0.0;
c.weighty=0.5; //c.weighty=0.5;
c.gridx=0;
c.gridy=0;
add(startButton, c);
c.gridx=1;
c.gridy=0;
add(stopButton, c);
}
private void setupButtons() {
startButton=new JToggleButton(iconStartButton);
stopButton=new JToggleButton(iconStopButton);
}
public class UserInterface extends JFrame {
public static void main(String[] args) {
run();
}
public UserInterface() {
setup();
}
private void setup() {
width=800;
height=600;
panel=new UserInterfacePanel();
getContentPane().add(panel);
setSize(width, height);
}
public static void run() {
UserInterface gui=new UserInterface();
gui.setVisible(true);
}
}
我希望能够控制按钮之间的间距,但是更改 c.gridwidth
或 c.weightx
没有给我结果。将 c.wightx
设置为 0.0 会导致按钮彼此靠得太近,而除零以外的任何值都会导致它们离得太远,c.widthx=0.9
和 c.widthx=0.1
之间的距离没有差异。我做错了什么?
尝试制作一个 Insets
变量,每次单击按钮时 int
都会增加。代码如下:
public class UserInterfacePanel extends JPanel {
private JToggleButton startButton;
private JToggleButton stopButton;
private int top = 3, left = 3, bottom = 3, right = 3;
private Insets i = new Insets(top, left, bottom, right);
public UserInterfacePanel() {
setup();
}
private void setup() {
setLayout(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
setupButtons();
setupButtonsActions();
c.insets = i;
c.weightx=0.5; //c.weightx=0.0;
c.weighty=0.5; //c.weighty=0.5;
c.gridx=0;
c.gridy=0;
add(startButton, c);
c.gridx=1;
c.gridy=0;
add(stopButton, c);
JButton b1 = new JButton("+1");
b1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
i = new Insets(top+1, left+1, bottom+1, right+1);
c.insets = i;
repaint();
}
});
add(b1, BorderLayout.SOUTH);
//...
}
我有一个 JPanel
,其中包含两个 JToggleButtons
。该面板有一个 GridBagLayout
并且有 1 行和 2 列。按钮位于同一行,但不同列。
class UserInterfacePanel extends JPanel {
private JToggleButton startButton;
private JToggleButton stopButton;
public UserInterfacePanel() {
setup();
}
private void setup() {
setLayout(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
setupButtons();
//setupButtonsActions();
c.insets=new Insets(3,3,3,3);
c.weightx=0.5; //c.weightx=0.0;
c.weighty=0.5; //c.weighty=0.5;
c.gridx=0;
c.gridy=0;
add(startButton, c);
c.gridx=1;
c.gridy=0;
add(stopButton, c);
}
private void setupButtons() {
startButton=new JToggleButton(iconStartButton);
stopButton=new JToggleButton(iconStopButton);
}
public class UserInterface extends JFrame {
public static void main(String[] args) {
run();
}
public UserInterface() {
setup();
}
private void setup() {
width=800;
height=600;
panel=new UserInterfacePanel();
getContentPane().add(panel);
setSize(width, height);
}
public static void run() {
UserInterface gui=new UserInterface();
gui.setVisible(true);
}
}
我希望能够控制按钮之间的间距,但是更改 c.gridwidth
或 c.weightx
没有给我结果。将 c.wightx
设置为 0.0 会导致按钮彼此靠得太近,而除零以外的任何值都会导致它们离得太远,c.widthx=0.9
和 c.widthx=0.1
之间的距离没有差异。我做错了什么?
尝试制作一个 Insets
变量,每次单击按钮时 int
都会增加。代码如下:
public class UserInterfacePanel extends JPanel {
private JToggleButton startButton;
private JToggleButton stopButton;
private int top = 3, left = 3, bottom = 3, right = 3;
private Insets i = new Insets(top, left, bottom, right);
public UserInterfacePanel() {
setup();
}
private void setup() {
setLayout(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
setupButtons();
setupButtonsActions();
c.insets = i;
c.weightx=0.5; //c.weightx=0.0;
c.weighty=0.5; //c.weighty=0.5;
c.gridx=0;
c.gridy=0;
add(startButton, c);
c.gridx=1;
c.gridy=0;
add(stopButton, c);
JButton b1 = new JButton("+1");
b1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
i = new Insets(top+1, left+1, bottom+1, right+1);
c.insets = i;
repaint();
}
});
add(b1, BorderLayout.SOUTH);
//...
}