第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

具有空布局的 JPanel 類不顯示組件

具有空布局的 JPanel 類不顯示組件

慕桂英4014372 2023-07-13 13:46:30
因此,我創(chuàng)建了一個(gè)“CustomPanel”類的對(duì)象,該對(duì)象創(chuàng)建一個(gè)帶有 GridLayout 的 JPanel 和其中的標(biāo)簽,然后將其添加到我的 JFrame 中。它可以很好地顯示標(biāo)簽“HELLO”,但是當(dāng)我將 jpanel 的布局管理器更改為 (null) 時(shí),它不會(huì)顯示任何內(nèi)容。我知道,我知道使用空布局是一種非常糟糕的做法,但我只想知道為什么它不顯示組件。主要類別:import javax.swing.JFrame;public class MainMenu extends javax.swing.JFrame{    private static void createAndShowGUI() {        //Create and set up the window.        JFrame frame = new JFrame();        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);        //Size the window.        frame.setSize(500, 500);        CustomPanel panel = new CustomPanel();        frame.getContentPane().add(panel);        frame.setVisible(true);    }    public static void main(String[] args) {        javax.swing.SwingUtilities.invokeLater(new Runnable() {            public void run() {                createAndShowGUI();            }        });    }}帶有 GridLayout 的 CustomPanel 類(效果很好):import java.awt.GridLayout;import javax.swing.JLabel;import javax.swing.JPanel;public class CustomPanel extends JPanel{    public CustomPanel() {        initUI();    }    public final void initUI() {        // create the panel and set the layout        JPanel main = new JPanel();        main.setLayout(new GridLayout());        // create the labels        JLabel myLabel = new JLabel("HELLO");        // add componets to panel        main.add(myLabel);        this.add(main);    }}具有空布局的 CustomPanel 類(這不起作用):import javax.swing.JLabel;import javax.swing.JPanel;public class CustomPanel extends JPanel{    public CustomPanel() {        initUI();    }    public final void initUI() {        // create the panel and set the layout        JPanel main = new JPanel();        main.setLayout(null);        // create the labels        JLabel myLabel = new JLabel("HELLO");        myLabel.setBounds(10, 10, myLabel.getPreferredSize().width, myLabel.getPreferredSize().height);        // add componets to panel        main.add(myLabel);        this.add(main);    }}jlabel 在 jpanel 內(nèi)正確設(shè)置,因此它應(yīng)該顯示在 jframe 的左上角,但事實(shí)并非如此。是什么原因造成的?我錯(cuò)過(guò)了什么?
查看完整描述

1 回答

?
搖曳的薔薇

TA貢獻(xiàn)1793條經(jīng)驗(yàn) 獲得超6個(gè)贊

問(wèn)題是,當(dāng)您不使用正確的布局管理器時(shí),主 JPanel 的首選大小為 0,0,并且不會(huì)在其所在的容器內(nèi)顯示。保存主 JPanel 的 CustomPanel 使用 FlowLayout 并將使用其包含的組件的首選大小來(lái)幫助調(diào)整這些組件的大小和位置,但由于 main 沒(méi)有布局,因此將 JLabel 添加到 main 不會(huì)增加首選大小,因?yàn)樗鼞?yīng)該是 - 另一個(gè)使用布局的原因,CustomPanel 會(huì)將 main 顯示為一個(gè)無(wú)大小的點(diǎn)。您當(dāng)然可以通過(guò)給 main 一個(gè)首選大小來(lái)解決這個(gè)問(wèn)題main.setPreferredSize(...),但是這樣你就會(huì)用一個(gè)拼湊來(lái)解決一個(gè)拼湊——這不好。另一種可能的解決方案是將 CustomPanel 的布局更改為其他可能擴(kuò)展它所包含的主 JPanel 的布局,也許為 CustomPanel 提供一個(gè) BorderLayout。在這種情況下,以默認(rèn)方式將 main 添加到 CustomPanel 會(huì)將主 JPanel 放置到 BorderLayout.CENTER 位置,將其展開(kāi)以填充 CustomPanel,并且可能會(huì)看到 JLabel。

當(dāng)然,正確的解決方案是盡可能避免使用空布局。


查看完整回答
反對(duì) 回復(fù) 2023-07-13
  • 1 回答
  • 0 關(guān)注
  • 200 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)