为什么setPreferredsize不更改按钮的大小?
-
23-09-2019 - |
题
这是代码:
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
public class TestGrid {
public static void main(String[] args) {
JFrame frame = new JFrame("Colored Trails");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel mainPanel = new JPanel();
mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS));
JPanel panel = new JPanel();
panel.setLayout(new GridLayout(4, 9));
panel.setMaximumSize(new Dimension(9*30-20,4*30));
JButton btn;
for (int i=1; i<=4; i++) {
for (int j=1; j<=4; j++) {
btn = new JButton();
btn.setPreferredSize(new Dimension(30, 30));
panel.add(btn);
}
btn = new JButton();
btn.setPreferredSize(new Dimension(30, 10));
panel.add(btn);
for (int j=1; j<=4; j++) {
btn = new JButton();
btn.setPreferredSize(new Dimension(30, 30));
panel.add(btn);
}
}
mainPanel.add(panel);
frame.add(mainPanel);
frame.setSize(450,950);
frame.setVisible(true);
}
}
我想有一个带有4行和9列的按钮表。并且中间的列应更窄,而不是其他列。我试过了 Dimension(30, 10)
和 Dimension(30, 10)
两者都对中间列的宽度没有影响。为什么?
解决方案
布局经理可以自由忽略首选尺寸。具体来说, GridLayout
将始终使网格中的每个单元格完全相同(因此,这是一个毫无用处的布局管理器)。
您必须使用其他布局管理器,例如嵌套 BoxLayout
或a GroupLayout
.
其他提示
要使用主机Web的颜色,您需要使用一些JavaScript动态加载主机Web的样式表。如果您在页面上使用jQuery,则可以使用以下ob javascript块将主机Web的样式表注入页面。
(function () {
// Retrieve the host web's URL from the query string
var scriptbase = $.queryString('SPHostUrl') + '/_layouts/15/';
// Create a <link> tag for the style sheet
var $doclink = $('link').attr('rel', 'stylesheet');
// The style sheet is loaded through an ASP.NET HTTP handler (defaultcss.ashx)
$doclink.attr('href', scriptbase + 'defaultcss.ashx');
// Add the style sheet link to the
$('head').append($doclink);
})();
.
如果这不起作用,您也可以查看Microsoft的文章如何:在Apps中使用SharePoint网站的样式表,用于SharePoint ,举个不需要jQuery的示例。
setPreferredSize
不会更改按钮的大小,直到使用尺寸设置尺寸为止。
例子:-
Dimension dim = new Dimension(20,20), then use setPerferredSize(dim).
我找到了此方法版本,非常适合您的解决方案:
.addComponent(<<a jButton instance>>, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, <<put here an integer to set you max width button size>>)
不隶属于 StackOverflow