同樣的問題,不同的背景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元素極大地擴展。這是爲什麼發生?下面的代碼的適用部分:寬度W的我想要做的就是伸展我的圖標(紅色)
// 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);
你可以從第一張圖看,我有一個標籤寬度W並放入標籤中。
當我這樣做時,標籤會展開(正好是50像素,我認爲)並擠壓左邊緣(綠色)。有誰知道爲什麼會發生這種情況?
我已經試過幾件事情是太詳細解釋,但無法找到問題: -/
這是正常行爲。 – Moonbeam
@Op。你使用什麼樣的layoutmanager? – Kaj
@Kaj - GridBagLayout,我很確定我的權重是正確的。 – Ben