我一直在嘗試顯示添加到 JPanel 的 JLabel 一段時間以來沒有成功。
主程式:
import javax.swing.*;
import java.awt.*;
public class Main{
public static void main(String[] args){
int screenWidth = 5000;
//int screenWidth = (int)Toolkit.getDefaultToolkit().getScreenSize().getWidth();
MyFrame frame = new MyFrame(screenWidth);
JLabel header = new JLabel("Choisissez un nombre");
header.setBounds(100,100,screenWidth-100,40);
header.setFont(new Font("Arial",Font.BOLD,40));
JPanel panel1 = new JPanel();
panel1.setBounds(100,140,screenWidth-100,100);
JLabel desc = new JLabel("entrez un nombre entre 1 et 100 : ");
desc.setFont(new Font("Arial",Font.BOLD,40));
panel1.add(desc);
frame.add(header);
frame.add(panel1);
frame.setVisible(true);
}
}
MyFrame班級 :
import javax.swing.JFrame;
public class MyFrame extends JFrame{
MyFrame(int screenWidth){
this.setSize(screenWidth/5,screenWidth/10);
this.setTitle("Le juste nombre");
this.setLayout(null);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
uj5u.com熱心網友回復:
所以你的問題基本上歸結為對 Swing 中布局管理如何作業的誤解。
首先,請查看在容器內布局組件以及如何使用 BorderLayout,因為這是默認的布局管理器用戶JFrame
一個簡單的解決方法是洗掉setLayout(null)和添加您的組件,如下所示...
frame.add(header, BorderLayout.NORTH);
frame.add(panel1);
但是,您的下一個問題是關于為什么忽略 size 和 position 屬性,這會導致您直接回到第一個鏈接。
布局管理器非常強大,但它們可能需要一些時間來適應。您需要放棄“像素完美”布局的概念,因為它們往往會很快崩潰,因為您的應用程式運行的幾乎每個環境都會有一些級別差異,這只會困擾您。
uj5u.com熱心網友回復:
洗掉線
this.setLayout(null);
但標題顯示在面板下方。
我的建議是添加一個BorderLayout以便您可以控制組件在框架中的顯示位置:
this.layout(new java.awt.BorderLayout());
// when you add components to the frame, specify where you want them:
frame.add(header,BorderLayout.NORTH);
frame.add(panel1,BorderLayout.CENTER);
為了進行測驗,您可以為面板設定背景顏色以了解更多顯示方式:
panel1.setBackground(Color.red);
uj5u.com熱心網友回復:
問題與我的使用無關this.setLayout(null),這是因為panel1.setBounds(100,140,screenWidth-100,100);面板溢位框架外,并且因為desc正在渲染的中心panel1被渲染到框架外。
解決方案:
替換:panel1.setBounds(100,140,screenWidth-100,100);
通過:panel1.setBounds(100,140,frame.getWidth()-100,100);
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/523033.html
標籤:爪哇摇摆
下一篇:帶有組合框的Jtable
