我製成一個JComponent顯示指定顏色的一個矩形。 (沒有找到任何其他方式來實現這種效果)。問題是,它不像預期的那樣遵循JFrame.pack()和佈局管理器。如何讓我的JComponent符合JFrame.pack和佈局管理器?
代碼:
import java.awt.*;
import javax.swing.*;
public class FooRunnable implements Runnable{
private class ColorSample extends JComponent{
private Color sampleColor;
private int width, height;
public ColorSample(int rgb, int w, int h){
sampleColor = new Color(rgb);
width = w;
height = h;
}
public Dimension getSize(){
return new Dimension(width, height);
}
public int getWidth(){
return width;
}
public int getHeight(){
return height;
}
public boolean isDisplayable(){
return true;
}
public void paintComponent(Graphics g){
g.setColor(sampleColor);
g.fillRect(0, 0, width, height);
}
}
public void run(){
JFrame mainFrame = new JFrame();
//mainFrame.setSize(500, 300);
Container mainContent = mainFrame.getContentPane();
mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mainContent.setLayout(new BoxLayout(mainContent, BoxLayout.PAGE_AXIS));
JPanel specifyFilePanel = new JPanel();
specifyFilePanel.setLayout(new BoxLayout(specifyFilePanel, BoxLayout.LINE_AXIS));
JLabel filenameLabel = new JLabel("File: ");
JButton browseButton = new JButton("Browse...");
specifyFilePanel.add(Box.createHorizontalStrut(8));
specifyFilePanel.add(filenameLabel);
specifyFilePanel.add(browseButton);
specifyFilePanel.add(Box.createHorizontalStrut(8));
JPanel colorStatusPanel = new JPanel();
colorStatusPanel.setLayout(new BoxLayout(colorStatusPanel, BoxLayout.Y_AXIS));
JLabel statusLabel = new JLabel("");
JButton roll = new JButton("Operate");
colorStatusPanel.add(new ColorSample(Color.red.getRGB(), 50, 100));
colorStatusPanel.add(statusLabel);
colorStatusPanel.add(roll);
mainContent.add(Box.createVerticalStrut(5));
mainContent.add(specifyFilePanel);
mainContent.add(Box.createVerticalStrut(10));
mainContent.add(colorStatusPanel);
mainContent.add(new JPanel());
mainFrame.pack();
mainFrame.setVisible(true);
}
}
我試着包間試驗和明確指定幀的大小。這裏是我的GUI的各種設置的默認外觀:
平原mainFrame.pack():
mainFrame.setSize(500,500):
mainFrame.setSize(500, 300):
最接近我打算實現的是mainFrame.setSize(500,500),但是,因爲我打算添加更多的組件,我預計它會變得脆弱。正如你所看到的,在另外兩個中,「操作」按鈕與ColorSample組件重疊 - 就像它沒有跟隨我設置的佈局管理器一樣。然後查看ColorSample組件的組裝方式。關於如何達到我想要的效果的任何提示?
解決方法:有關使用空'JLabel',它的大小設置爲所需的一個,然後調用'的setBackground(彩色)'什麼? – Rom1
哇。老實說,沒有想到這一點。只有ColorSample將來不得不改變形狀 - 我實際上是在製作一些像孩子的幼兒園軟件。但我會記住這一點。 :d – skytreader