JPanel 占用整个 space JFrame
JPanel takes the entire space of JFrame
我正在努力使用 Swing 中的 FlowLayout 管理器放置一些简单的对象。
基本上我创建了一个小程序,我设置了框架的大小,然后创建了一些 JLabel,然后创建了一个 JPanel。
我已将 JPanel 的 setSize 设置为 300x300,并将其颜色更改为红色以便直观地看到它。但是,它占用了 JFrame 的整个 space,似乎 setsize 对其没有影响。
我做错了什么?我试着用谷歌搜索它并多次更改代码,但没有成功。我什至读过,但显然没有正确理解,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();
}
});
}
}
JFrame
默认使用 BorderLayout
LayoutManager
。因此,您需要将 JFrame
的布局隐式设置为 FlowLayout
:
this.setLayout(new FlowLayout());
您还需要在 panel
上使用 setPreferredSize()
而不是 setSize()
,因为如果 panel
的容器(JFrame
) 有非空 LayoutManager
.
我正在努力使用 Swing 中的 FlowLayout 管理器放置一些简单的对象。
基本上我创建了一个小程序,我设置了框架的大小,然后创建了一些 JLabel,然后创建了一个 JPanel。
我已将 JPanel 的 setSize 设置为 300x300,并将其颜色更改为红色以便直观地看到它。但是,它占用了 JFrame 的整个 space,似乎 setsize 对其没有影响。
我做错了什么?我试着用谷歌搜索它并多次更改代码,但没有成功。我什至读过,但显然没有正确理解,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();
}
});
}
}
JFrame
默认使用 BorderLayout
LayoutManager
。因此,您需要将 JFrame
的布局隐式设置为 FlowLayout
:
this.setLayout(new FlowLayout());
您还需要在 panel
上使用 setPreferredSize()
而不是 setSize()
,因为如果 panel
的容器(JFrame
) 有非空 LayoutManager
.