我有一个几乎到处都是JScrollPane
的窗口。我正在向它添加大按钮(带有图像),我希望它们继续向下添加,这就是为什么我使用GridBagLayout
并设置gbc。gridx,gbc。gridy
每次我添加一个按钮。
但问题是,当我添加不到4个按钮时,它们会对齐到行的中心,而不是我想要的左侧。就像这样
你知道我该怎么把它们对准左边吗?我试过gbc。锚定和gbc。填充但没有运气。谢谢
这是我的JScrollPane
private JPanel imagesPanel() {
JPanel panel = new JPanel(new GridBagLayout());
int x = 0;
int y = 0;
GridBagConstraints c = new GridBagConstraints();
//c.anchor = GridBagConstraints.NORTHWEST;
//add all images as buttons
List<PuzzleImage> imageList = _imageLoader.getImageCollection().getAllImages();
for(PuzzleImage puzzleImage : imageList) {
for(int i = 0; i < 1; i++) { //ignore this, just for debugging. i add 3 images
ImageIcon imageIcon = new ImageIcon(puzzleImage.getLowScaleImage());
c.gridx = x;
c.gridy = y;
c.weightx = 1.0;
JButton btn = new JButton(imageIcon);
btn.setPreferredSize(new Dimension(ImageLoader.LOW_SCALE_IMAGE_SIZE, ImageLoader.LOW_SCALE_IMAGE_SIZE));
panel.add(btn, c);
x++;
if(x>=4) {
x = 0;
y++;
}
}
}
return panel;
}
没有你的代码很难给出准确的答案,但是这里有一个可能的解决方案:
你可以把你的JPanel保存所有的图片,并把它嵌套在另一个JPanel中,使它像这样锚定在左边:
JPanel pictures = /* already defined */;
JPanel container = new JPanel(new BorderLayout());
container.add(pictures, BorderLayout.WEST);
//add container to your scroll container
但问题是,当我添加少于4个按钮时,它们会对齐到行的中心,而不是像我希望的那样对齐到左侧
至少有一个组件需要具有大于0的权重
约束。
阅读Swing教程中关于如何使用GridBagLayout的部分。解释约束如何工作的部分将提供更多信息。
你为什么要使用GridBagLayout
?在你的最后一个问题中,我给了你一个简单的解决方案:Swing中的FlowLayout不会移动到下一行。然后你甚至不需要担心约束。
或者你可以使用一个GridLayout
你只需要定义你想要4列和组件自动包装。您可能需要嵌套面板,以便组件不会因框架的大小而收缩/增长。
基本代码是:
JPanel wrapper = new JPanel();
JPanel buttons = new JPanel( new GridLayout(0, 4) );
for (...)
{
JButton button = new JButton(...);
buttons.add( button );
}
frame.add(wrapper);
问题内容: 我想以有意义的方式使用Swing将MVC设计应用于Java应用程序。因此,我的问题是,如何在Java Swing中构造控制器? 我有两个选择: 每个组件侦听器都是自己的类,作为控制器包的一部分 每个组件侦听器都是视图包中的一个匿名类,该类将其调用委托给具有控制器方法的类。 两者都有可能吗?是偏好问题还是明确定义的? 问题答案: Controller构成了组件接口的另一半,主要是交互的一
问题内容: 我在设计要开发的应用程序体系结构时遇到了一些麻烦。我正在研究JAVA,因此开始研究此应用程序是因为我想加深对JAVA,体系结构和模式的整体了解。我想遵循指导方针来制作可复用的,低耦合的应用程序,就像应该的那样。该应用程序只有一个JFrame,但内部有几个JPanel,每个JPanel代表应用程序的一个模块。 问题是:在JAVA Swing中,如何实现适当的MVC模式?我在如何理解应该完
我在设计我要开发的应用程序的架构时遇到了一些问题。我正在研究JAVA,我开始研究这个应用程序,因为我想加深我对JAVA、体系结构和模式的全面了解。我想按照这些指导原则来创建一个可重用、低耦合的应用程序,就像它应该做的那样。应用程序只有一个JFrame,但其中有几个JPanel,每个代表应用程序的一个模块。 问题是:在JAVA Swing中,如何实现一个合适的MVC模式?我在如何理解应该如何做的问题
问题内容: 我试图在单个行上具有多个JTextField,但是我不希望它们具有相同的宽度。如何控制宽度并使其中一些比其他更宽?我希望它们一起占总宽度的100%,所以如果我可以使用某种重量的东西,那将是很好的。 我试过了,但是没有道理。 这是一个示例,其中我使用了三行和三个字符串,这些字符串应按列显示: 问题答案: 所有Swing组件均具有首选大小。文本组件的首选大小基于组件的文本。因此,一般情况下
我使用创建面板。 我想要面板右角的删除图标。但是,如果未将添加到面板中,删除图标将向左移动。 如何正确地做到这一点? 这是我的GridBagLayout面板设置代码 有添加组件到面板的代码
这个问题主要是关于在Java-Swing中实现MVC体系结构的标准实践。我知道以前有人问过这个问题,但我想更具体地介绍一下控制器的使用。 我一直在分离我的模型、视图和控制器,其中: 数据在模型类内处理 Swing组件位于视图类中 事件处理匿名类也在视图类(用户输入)中 控制器类包含对模型和视图对象的引用 回到具体的控制器-我一直使用类(静态)变量来表示控制器,以方便应用程序的任何部分访问。因此我的