我正在使用GroupLayout
一些动态生成的数据输入形式来管理组件。布局大致如下:
*-----------------------------------------------*
| label A | field A |
| label B | field B |
| label C | field C |
*-----------------------------------------------*
我将2个平行组用于水平布局,并将一个顺序组用于垂直布局。在大多数情况下,一切都很好。
我想将标签的最大宽度(只是的实例JLabel
)限制为父级宽度的1/3 JFrame
。如果将JFrame其设置为固定大小,这将是微不足道的,但是我必须处理它的调整大小。
我正在ComponentListener.componentResized()
从接收事件,JFrame但是一旦收到这样的事件,我就该做什么了。
我试过这种方法没有任何运气:
public void componentResized(ComponentEvent e) {
int maxW = parentFrame.getWidth() / 3;
for (JLabel l : labels) {
l.setMaximumSize( // have also tried setSize() and setPreferredSize()
new Dimension(
Math.min(l.getSize().width, maxW),
l.getMaximumSize().height));
}
groupLayout.invalidateLayout(getContentSpace());
}
谁能建议一种可以限制标签宽度的方法?
我可能每次都可以从头开始重新构建布局,但是我觉得应该有一个更简单的方法。
在此示例中,GroupLayout
可以简单地依靠标签的首选大小,而不必诉诸任何setXXXSize()
方法。用这种方法
GroupLayout
:组件大小和可调整大小GroupLayout.Alignment.TRAILING
右对齐标签是个人喜好,我添加了第二个面板以嵌套在另一个布局中显示其工作方式。import java.awt.EventQueue;
import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.GroupLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
/** @see http://stackoverflow.com/questions/8492065 */
public class GroupPanel extends JPanel {
private JLabel label1 = new JLabel("Primary:");
private JTextField field1 = new JTextField(16);
private JLabel label2 = new JLabel("Secondary:");
private JTextField field2 = new JTextField(16);
private JLabel label3 = new JLabel("Tertiary:");
private JTextField field3 = new JTextField(16);
public GroupPanel(int n) {
this.setBorder(BorderFactory.createTitledBorder("Panel " + n));
GroupLayout layout = new GroupLayout(this);
this.setLayout(layout);
layout.setAutoCreateGaps(true);
layout.setAutoCreateContainerGaps(true);
layout.setHorizontalGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.TRAILING)
.addComponent(label1)
.addComponent(label2)
.addComponent(label3))
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addComponent(field1)
.addComponent(field2)
.addComponent(field3))
);
layout.setVerticalGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE)
.addComponent(label1)
.addComponent(field1))
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE)
.addComponent(label2)
.addComponent(field2))
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE)
.addComponent(label3)
.addComponent(field3))
);
}
private static void display() {
JFrame f = new JFrame("GroupPanel");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setLayout(new BoxLayout(f.getContentPane(), BoxLayout.Y_AXIS));
f.add(new GroupPanel(1));
f.add(new GroupPanel(2));
f.add(Box.createVerticalGlue());
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
display();
}
});
}
}
问题内容: 我正在使用Python工作,并且我有一个像这样的NumPy数组: 如何将其扩展为以下内容? 这些只是一些示例数组,实际上我将调整几种大小的数组,而不仅仅是这些。 我是新来的,我似乎无法全神贯注于需要做的事情。 问题答案: @KennyTM的答案非常巧妙,确实适用于您的情况,但作为替代方案,可以为扩展数组提供更多的灵活性try : 因此,这完成了沿一个轴的重复,以使其沿多个轴(如您所愿)
我试图创建JPanel与可拖动的交叉显示后,鼠标点击。一切都很好,但是当我调整JPanel的大小时,交叉消失了。我试图重写JPanel中的paintComponent方法,但所有交叉都在坐标(0,0)处。我该怎么修好它?
问题内容: 我正在使用JVM标志运行Java进程,并看到以下输出: 有没有办法解决这个问题? 问题答案: 当无法满足Java堆的分配或永久生成时,命令行选项告诉HotSpot VM生成堆转储。使用此选项运行不会产生任何开销,因此对于OutOfMemoryError需要很长时间才能浮出水面的生产系统很有用。 为了解决您面临的特定问题,可以使用以下纠正措施之一: 措施1: XX:HeapDumpSeg
我的Java Swing GUI有问题。首先,我创建了一个带有GridBagLayout的面板,并将所有标签添加到其中。然而,我还在另一个JPanel的右侧创建了一个面板,其中添加了一个按钮和两个滑块,它们应该与标签匹配。 问题是JLabels比另一个面板右侧的组件小,这使得它看起来像这样...... 例如,水选项——JSLIDER(JSLIDER看起来要大得多) 我试图通过将添加到更大的值来使组
我想让JFrame上的组件随着窗口的大小调整而调整大小。 这怎么能做到。 当前,当我使JFrame变小时,组件会保留在相同的位置,然后随着框架变小而消失。 理想情况下,我希望设置一个最小的JFrame大小,它不允许表单变小,但当我将其变大时,组件应该随JFrame移动。 补充:如果我想使用绝对布局管理器,该怎么办。这是我老板比较喜欢的布局经理。 代码: 公共类TestFrame扩展JFrame{p
问题内容: 我试图通过这样将数据从一个活动传递到另一个活动: 这是包含用户数据的列表,包括Base64编码的照片,此列表中字符串大小的总和约为500Kb 打电话到黑屏挂了几分钟,然后出现ANR错误。完全不调用子活动。 如果我不向mUsers中添加大字符串(没有Base64编码的照片),则可以正常工作。 请帮忙。 问题答案: 如果两种活动都是您的,请使用体面的数据模型。Android不鼓励设计精良的