在示例程序的第一个选项卡中:在第一行中,组件在其单元格中 r 和 l 对齐。在第二行中,单元格被跨越并推到右侧。
第一行中的所有多余空间都分配给单元格 0,0,其中包含标记为“20”的组件。
选项卡“二”通过使用pushx改善了这种情况。该小部件看起来居中,但这不是我想要的。
但是如何将所有多余空间分配给单元格 0、1(包含标记为“30”的组件的单元格)?我尝试发布我想要完成的图像,但系统不允许这样做。希望我的口头解释足够清楚。
package test1;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import net.miginfocom.swing.MigLayout;
public class Main extends JTabbedPane {
public Main() {
addTab("One", createPanel1());
addTab("Two", createPanel2());
}
public static void main(String[] args) {
final JFrame frame = new JFrame("Test MigLayout");
Main main = new Main();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setContentPane(main);
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
frame.pack();
frame.setVisible(true);
frame.setBounds(200, 200, 800, 500);
}
});
}
private JPanel createPanel1() {
JPanel panel = new JPanel(new MigLayout("hidemode 3, debug", "[r][l]"));
JTextField textField1 = new JTextField("20", 20);
JTextField textField2 = new JTextField("30", 30);
JButton button = new JButton("Button");
panel.add(textField1);
panel.add(textField2, "wrap");
panel.add(button, "span 2, pushx");
return (panel);
}
private JPanel createPanel2() {
JPanel panel = new JPanel(new MigLayout("hidemode 3, debug", "[r][l]"));
JTextField textField1 = new JTextField("20", 20);
JTextField textField2 = new JTextField("30", 30);
JButton button = new JButton("Button");
panel.add(textField1);
panel.add(textField2, "pushx, wrap");
panel.add(button, "span 2, pushx");
return (panel);
}
}
最佳答案
令人惊讶的是任何单元格都在水平生长,因为默认情况下不是这样。直到重新阅读推送文档:
Makes the row and/or column that the component is residing in grow with "weight". This can be used instead of having a "grow" keyword in the column/row constraints
在按钮的跨越单元格中使用它可以有效地将增长约束应用于跨度的第一列。在不知道您的确切目标的情况下,除了说:不要:-)之外很难提出任何建议:一种选择可能是显式增加第二列:
JPanel panel = new JPanel(new MigLayout("hidemode 3, debug, wrap 2", "[r][l, grow]"));
JTextField textField1 = new JTextField("20", 20);
JTextField textField2 = new JTextField("30", 30);
JButton button = new JButton("Button");
panel.add(textField1);
panel.add(textField2);
panel.add(button, "span");
顺便说一句:我总是建议在层次结构中尽可能高地定义约束(布局 > 行/列 > 组件) - 遵循 DRY :-)
关于java - 单元格的权重向右而不是向左,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14754333/