なぜ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
グリッド内の各セルは常にまったく同じサイズになります(そのため、それはかなり役に立たないレイアウトマネージャーです)。
Nestedなどの別のレイアウトマネージャーを使用する必要があります BoxLayout
またはa GroupLayout
.
他のヒント
ホストWebの色を使用するには、Host WebのスタイルシートをいくつかのJavaScriptで動的にロードする必要があります。ページ上でjQueryを使用している場合は、次の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の記事どのように:SharePoint のSharePointのWebサイトのスタイルシートを使用します。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