同じ質問、異なる文脈Java Swing - アイコンまたはテキストを追加するとJLabelの幅が変更されましたか?
問題がまだあるので、私は、私が前に受け入れることで、あまりにも性急だったようです。問題? JLabelは、コンテンツが追加されるとその親パネルを拡張する自由を取る。
それは提案を-ses、ここでそれは "ウナギの完全なホバークラフト" ごとに、それを再生するための時間です:
import java.awt.*;
import javax.swing.*;
public class TestLabel {
public static void main(String[] args) {
// Var inits
JFrame frame;
JPanel panel;
JLabel label;
Container pane;
GridBagConstraints gbc = new GridBagConstraints();
// Frame, content pane, layout inits
frame = new JFrame("Label Tester");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pane = frame.getContentPane();
pane.setLayout(new GridBagLayout());
gbc.weighty = 1;
gbc.fill = GridBagConstraints.BOTH;
// Add panels (note gbc weighty and fill carries over all instances)
gbc.weightx = 0.3;
gbc.gridx = 0;
gbc.gridy = 0;
panel = new JPanel();
panel.setBackground(Color.GREEN);
frame.add(panel,gbc);
label = new JLabel("THE PANEL IS NOW DISTORTED TO FIT THIS LABEL WHY IS THIS HAPPENING");
//label = new JLabel("");
label.setOpaque(true);
label.setBackground(Color.WHITE);
panel.add(label);
gbc.weightx = 0.7;
gbc.gridx = 1;
gbc.gridy = 0;
panel = new JPanel();
panel.setBackground(Color.RED);
frame.add(panel,gbc);
gbc.weightx = 0.3;
gbc.gridx = 0;
gbc.gridy = 1;
panel = new JPanel();
panel.setBackground(Color.BLUE);
frame.add(panel,gbc);
gbc.weightx = 0.7;
gbc.gridx = 1;
gbc.gridy = 1;
panel = new JPanel();
panel.setBackground(Color.YELLOW);
frame.add(panel,gbc);
frame.pack();
frame.setSize(800,600);
frame.setVisible(true);
}
}
結果:緑、あなたが見ることができるよう
パネルが広げられ、テキスト(または、元の質問とアイコンの中に)が追加されると、私のレイアウト全体が捨てられます。コンテンツに関係なく、私のレイアウトが同じウェイトを維持したい。私が元の質問に見られるように、ラベルにアイコンとして拡大縮小画像を追加しようとしているためです。
ちなみに、setPreferredSize()
が動作するようには思えません。
これを修正する方法はありますか?私はそれにアイコンを追加するとき
元の質問
マイJLabelの要素が大幅に拡大します。なぜこうなった?ここでは、コードの該当部分があります:
// Show label and BG color
redLabel.setBackground(Color.RED);
redLabel.setOpaque(true);
// Grab stretched image (already loaded elsewhere in the code) and turn to icon
Img = Img.getScaledInstance(redLabel.getWidth(),12,Image.SCALE_REPLICATE);
ImageIcon icon = new ImageIcon(Img);
// This line throws everything off!
//It's commented out in the first pic, and included in the second.
redLabel.setIcon(icon);
あなたが最初picから見ることができるように、私は私がやろうとしているどのような幅Wのラベル(赤)を持っていることに、私のアイコンを伸ばしています幅Wとラベルに入れてください。
私はこれを行う、ラベルは膨張(正確に50ピクセルで、私は思う)し、また、左エッジ(緑)の上に絞り出します。なぜ誰が何が起こっているのか分かりませんか?
私が説明するのはあまりにも冗長ではありますが、問題を見つけることができないいくつかのことを試してみた: -/
これは正常な動作です。 – Moonbeam
@Op。どのレイアウトマネージャーを使用していますか? – Kaj
@ Kaj - GridBagLayout、そして私は私の重み付けが正しいと確信しています。 – Ben