作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我遇到了一个不寻常的问题,JPanel 内的所有对象都采用 JTextField 的大小。即使我尝试强制其他对象的大小,它们仍然会将为文本字段指定的大小视为自己的大小。例如,我尝试用自己的方法设置单个面板,如下所示:
private JPanel setupID() {
JLabel projLbl = new JLabel("Project ID:");
JButton verifyBtn = new JButton("Verify ID");
projID = new JTextField(25);
verifyBtn.setToolTipText("Verifies that the entered ID is not already in use.");
JPanel theID = new JPanel(new GridLayout(1,0));
theID.add(projLbl);
theID.add(projID);
theID.add(verifyBtn);
return theID;
}
我最终得到的是一个看起来像这样的窗口... 正在加载的 JFrameframe;
调用了 frame.pack()
方法来自动调整帧大小。如果我在不同区域(例如西、中心、东)的 BorderLayout()
中创建各个对象,它们将按预期工作,但当它们加载到面板中时,它们的大小都会改 rebase 于 JTextField(25)
。有什么想法吗?
最佳答案
正如 Code-Guru 和 asemax 所指出的。您似乎正在使用 GridLayout
,它旨在利用可用空间在网格中均匀地布局组件。
尝试使用 GridBagLayout
之类的东西来代替...
public class BadLayout08 {
public static void main(String[] args) {
new BadLayout08();
}
public BadLayout08() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception ex) {
}
JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
frame.add(new TestPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class TestPane extends JPanel {
public TestPane() {
setLayout(new GridBagLayout());
add(new JLabel("Project ID:"));
add(new JTextField(25));
add(new JButton("Verify ID"));
}
}
}
您可能会找到A Visual Guide to Layout Managers当您需要决定使用哪种布局时会有一些用处。
关于Java Swing JPanel 对象大小均与 JTextField 大小匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14225419/
我是一名优秀的程序员,十分优秀!