我正在努力使用Swing中的FlowLayout管理器放置一些簡單的對象。JPanel佔用JFrame的整個空間
基本上我創建了一個小程序,我已經設置了框架的大小,然後創建了一些JLabels,然後創建了一個JPanel。
我已將JPanel的setSize設置爲300x300,並將其顏色更改爲紅色以便直觀地看到它。然而,它佔用了JFrame的整個空間,看起來setsize對它沒有影響。
我在做什麼錯?我試着用Google搜索它,並改變了代碼幾次,但沒有運氣。我甚至讀過,但顯然沒有正確理解,oracle上的代碼... 請幫忙。下面是我的代碼到目前爲止。
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.Toolkit;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
public class Main extends JFrame{
public String frameTitle, projectNameString, countryNameString, projectDetailString, requestDateString;
private int offerRevisionVal;
private Toolkit toolkit;
// UPPER OBJECTS
//private JLabel projectLabel, countryLabel, projectDetailLabel, offerLabel, requestDateLabel, emptyLabel;
public Main(){
frameTitle = "CRANES QUOTATIONS";
// MAIN INSTANCE VARIABLES DEFINITION
projectNameString = "Project Title"; // TO ADD LATER
countryNameString = "Brazil"; // TO ADD LATER
projectDetailString = "32 Cranes biTravi"; // TO ADD LATER
offerRevisionVal = 01; // TO ADD LATER
requestDateString = "20-April-2017"; // tTO ADD LATER
this.setTitle(frameTitle);
JPanel panel = new JPanel();
panel.setBackground(Color.red);
panel.setSize(new Dimension(300,300));
//projectLabel = new JLabel(projectNameString);
//countryLabel = new JLabel(countryNameString);
//projectDetailLabel = new JLabel(projectDetailString);
//offerLabel = new JLabel(String.valueOf(offerRevisionVal));
//requestDateLabel = new JLabel(requestDateString);
this.add(panel);
// ===========================================================================
this.setSize(800, 300); // set the height and width of my window
this.centerToScreen();
this.setVisible(true); // set visibility
this.setDefaultCloseOperation(EXIT_ON_CLOSE); // sets up what it does when I close the App.
}
// Method to center to screen
public void centerToScreen(){
toolkit = getToolkit();
Dimension size = toolkit.getScreenSize(); // gets the screen size
setLocation(size.width/2 - getWidth()/2, size.height/2 - getHeight()/2); // sets the location
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable(){
@Override
public void run() {
new Main();
}
});
}
}
我建議看一看[佈局管理器的視覺指南](http://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html)和[敷設容器內的組件] (http://docs.oracle.com/javase/tutorial/uiswing/layout/index.html) – MadProgrammer
這是我擡頭看的第一個地方。但是它並沒有提到帕夫洛所說的問題。當討厭的邏輯被複雜的錯誤覆蓋時,我討厭它......很難學習正確的道路。我會在今天晚上回來工作後試試,並希望它能奏效。 – zypa
另一個地方是[JFrame的JavaDocs](https://docs.oracle.com/javase/8/docs/api/javax/swing/JFrame.html),其中指出*「默認內容窗格將有一個BorderLayout管理器設置它「* – MadProgrammer