当JDialog窗口的大小改变时,JLabel和JTextField不会保持左对齐。是否可以让JLabel始终停靠在JDialog的左侧,同时让JTextFields增加宽度以覆盖右侧的其余水平空间。我认为网格包布局会对这种方法有所帮助,但到目前为止,我只能告诉它将每个组件放在网格b ad中的坐标。有什么建议或提示吗?
下面是我的代码,我从网上看到的另一个示例中创建了一个虚拟示例。
import java.awt.BorderLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.SwingUtilities;
public class GridBagLayoutExample extends JDialog {
GridBagLayoutExample() {
initUI();
}
private void initUI() {
final JPanel controls = new JPanel(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
c.insets = new Insets(10,10,0,10);
JLabel firstNameLabel = new JLabel();
firstNameLabel.setText("1st Name");
c.gridx = 0;
c.gridy = 0;
controls.add(firstNameLabel,c);
JTextField firstNameField = new JTextField("Please input a 1st Name");
c.gridx = 1;
c.gridy = 0;
controls.add(firstNameField, c);
JLabel secondNameField = new JLabel();
secondNameField.setText("2nd Name");
c.gridx = 0;
c.gridy = 1;
c.gridwidth = 1;
c.fill=GridBagConstraints.HORIZONTAL;
controls.add(secondNameField, c);
JTextField secondNameLabel = new JTextField("Please input a 2nd Name");
c.gridx = 1;
c.gridy = 1;
controls.add(secondNameLabel, c);
JLabel thirdNameLabel = new JLabel();
thirdNameLabel.setText("3rd Name");
c.gridx = 0;
c.gridy = 2;
controls.add(thirdNameLabel, c);
JTextField thirdNameField = new JTextField("Please input a 3rd Name");
c.gridx = 1;
c.gridy = 2;
controls.add(thirdNameField, c);
controls.add(new JPanel(){
{
}});
setLayout(new BorderLayout());
add(controls, BorderLayout.NORTH);
pack();
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new GridBagLayoutExample().setVisible(true);
}
});
}
}
看看GridbagConstraints#weightx
import java.awt.BorderLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
public class GridBagLayoutExample extends JDialog {
GridBagLayoutExample() {
initUI();
}
private void initUI() {
final JPanel controls = new JPanel(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
c.insets = new Insets(10, 10, 0, 10);
JLabel firstNameLabel = new JLabel();
firstNameLabel.setText("1st Name");
c.gridx = 0;
c.gridy = 0;
c.fill = GridBagConstraints.HORIZONTAL;
controls.add(firstNameLabel, c);
JTextField firstNameField = new JTextField("Please input a 1st Name");
c.gridx = 1;
c.gridy = 0;
c.weightx = 1;
controls.add(firstNameField, c);
JLabel secondNameField = new JLabel();
secondNameField.setText("2nd Name");
c.weightx = 0;
c.gridx = 0;
c.gridy = 1;
c.gridwidth = 1;
controls.add(secondNameField, c);
JTextField secondNameLabel = new JTextField("Please input a 2nd Name");
c.gridx = 1;
c.gridy = 1;
c.weightx = 1;
controls.add(secondNameLabel, c);
JLabel thirdNameLabel = new JLabel();
thirdNameLabel.setText("3rd Name");
c.weightx = 0;
c.gridx = 0;
c.gridy = 2;
controls.add(thirdNameLabel, c);
JTextField thirdNameField = new JTextField("Please input a 3rd Name");
c.weightx = 1;
c.gridx = 1;
c.gridy = 2;
controls.add(thirdNameField, c);
controls.add(new JPanel() {
{
}
});
setLayout(new BorderLayout());
add(controls, BorderLayout.NORTH);
pack();
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new GridBagLayoutExample().setVisible(true);
}
});
}
}
另请查看如何使用GridBagLayout以获取更多详细信息。
GridBagLayout
非常强大,但这也使它非常复杂;)
我使用Infinispan缓存来存储值。代码每10分钟写入一次缓存,缓存大小约为400mb。它的生存时间约为2小时,最大条目数为1600万条,尽管目前在我的测试中,条目数没有超过200万条左右(我可以通过检查jconsole中的MBean/指标来了解这一点)。 当我启动jboss时,java堆大小是1.5Gb到2Gb。为jboss分配的最大内存的-Xmx设置是4Gb。 当我禁用Infinispan
问题内容: 我正在制作一个具有以下布局()的Java Swing应用程序: 当用户添加或删除图标时,其他图标应缩小或增长。 我的问题很简单:我有一个包含;如何调整此图标的大小? 问题答案: 调整图标大小并不容易。您需要使用Java的2D图形来缩放图像。第一个参数是Image类,您可以从类中轻松获取。您可以使用class加载图像文件,然后只需调用getter方法即可获取图像。
我知道如何以正常的方式改变JLabel的字体大小 但是我想看看当您将JLabel添加到面板时是否有一种方法,即简单的方法。像这样.. 当JLabel没有名称时,我如何更改后者的字体大小? 我尝试在JPanel上设置字体,但它不起作用。 对此,我们将不胜感激。
我对JavaFX有问题。当我调整窗口大小时,它会自动调整锚具的大小以适应。此外,帆布的宽度和高度属性也被绑定到锚烷上。因此,如果通过重新调整窗口本身,锚烷变大,画布也会变大。 但是当我把窗户变小,宽度和高度保持不变时,问题就来了。我真的不明白那里的行为。 因此,如果在使窗户更大的宽度和高度是100。然后在把窗口缩小后,它仍然是100。。。除息的 这是我的画布控制器。 以及我对应的FXML:
问题内容: 我正在尝试制作一个Java桌面应用程序,其中我要使用多个应用程序,我要设置的固定高度和宽度。我该如何实现? 这是我的代码 当我减少文本大小或文本 ,然后尺寸缩小但我想,当我减少或消除任何文字,但JLabel的大小不应该减少它应该修复 我怎么能得到这个? 提前致谢 问题答案: 您可以通过设置最小,首选和最大大小来设置固定大小: 当链接从 MadProgrammer ,你需要重写这些方法,
我想在内部设置一个的。 我试着用 但这不起作用。我怎么能这么做?