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

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

GridBagLayout - 我的列數(shù)似乎少于指定的列數(shù),但為什么呢?

GridBagLayout - 我的列數(shù)似乎少于指定的列數(shù),但為什么呢?

慕少森 2023-03-31 15:33:05
我想讓我的框架設(shè)置看起來不難看,所以我決定深入研究布局。GridBagLayout似乎是最通用的,所以我正在對它進(jìn)行一些試驗(yàn),以便理解它。我的問題是,盡管我在 3 列中有 3 個(gè)組件,但出于某種原因,前兩個(gè)組件放在同一列中。也許我不明白,但我想了 20 多次,對我來說真的沒有意義。請幫忙。這是一些代碼:// Frame Setup        JFrame frame = new JFrame("GridBagLayout_Test");        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);        frame.getContentPane().setBackground(Color.CYAN);        frame.setLocation(550, 250);        frame.setSize(800, 550);        JPanel startScreen = new JPanel(new GridBagLayout());        startScreen.setBackground(Color.BLACK);        GridBagConstraints gbc = new GridBagConstraints();        gbc.weightx = 1;        gbc.weighty = 1;        gbc.fill = GridBagConstraints.BOTH;        JButton colorbutton = new JButton("Color");        gbc.gridheight = 1;        gbc.gridwidth = 1;        gbc.gridx = 2;        gbc.gridy = 0;        colorbutton.setPreferredSize(new Dimension(100, 30));        startScreen.add(colorbutton, gbc);        JLabel game_name = new JLabel("LABEL");        gbc.gridheight = 1;        gbc.gridwidth = 3;        gbc.gridx = 0;        gbc.gridy = 1;        game_name.setBackground(Color.ORANGE);        game_name.setOpaque(true);        game_name.setPreferredSize(new Dimension(100, 30));        startScreen.add(game_name, gbc);        JButton start = new JButton("START");        gbc.gridheight = 1;        gbc.gridwidth = 1;        gbc.gridx = 1;        gbc.gridy = 2;        start.setPreferredSize(new Dimension(100, 30));        startScreen.add(start, gbc);        // Show Results        frame.add(startScreen);        frame.setVisible(true);
查看完整描述

2 回答

?
qq_遁去的一_1

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

盡管我在 3 列中有 3 個(gè)組件,但出于某種原因,前兩個(gè)組件放在同一列中

實(shí)際上,從 GridBagLayout 的角度來看,您只有兩列。

gbc.gridwidth = 3;

當(dāng)您使用gridWidth約束時(shí),您是在說您沒有特定的列,因?yàn)樗鼘⒄加?3 列的空間(假設(shè)您實(shí)際上有 3 列,但您沒有)。由于您只有 2 個(gè)網(wǎng)格寬度為 1 的組件,因此您實(shí)際上只有 2 列。

那就是第一列沒有唯一的寬度(因?yàn)樘砑拥降谝涣械奈ㄒ唤M件跨越多列),那么第二列應(yīng)該從哪里開始呢?

為了演示這一點(diǎn),請將您的代碼更改為僅使用gridxgridy約束。

然后您將在 3 行的 3 列中看到 3 個(gè)組件。

接下來,添加回:

gbc.gridwidth = 3;

對于“標(biāo)簽”。

然后您將在一列中看到所有 3 個(gè)組件。這是因?yàn)?3 的網(wǎng)格寬度也將用于“開始”按鈕。所以實(shí)際上“標(biāo)簽”和“開始”組件沒有唯一的列,所以只有“顏色”有一個(gè)定義的列,所以你有一個(gè)只有一列的網(wǎng)格。

接下來,添加回:

gbc.gridwidth = 1;

對于“開始”按鈕。

然后您將看到按鈕的兩列,標(biāo)簽將跨越兩列。這是因?yàn)椤伴_始”和“顏色”具有唯一的列,而“標(biāo)簽”只能跨越 2 列(即使您要求它跨越 3 列)。

我不確定你想要完成的確切布局,所以我不能給出建議的解決方案,但希望你能理解為什么你真的只有 2 列,而不是 3 列。

請注意,作為 hack,您可以在第一列中添加一個(gè)虛擬組件,然后標(biāo)簽可以跨越 3 列。虛擬組件類似于:

 JLabel filler = new JLabel("");
    gbc.gridheight = 1;
    gbc.gridwidth = 1;
    gbc.gridx = 0;
    gbc.gridy = 1;
    game_name.setPreferredSize(new Dimension(100, 30));
    startScreen.add(filler, gbc);


查看完整回答
反對 回復(fù) 2023-03-31
?
函數(shù)式編程

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

GridBagLayouts 和 GridBagConstrains 就像 excel 表一樣工作。有列和行,您可以在其中以水平和垂直方式放置組件。您還可以合并布局等。

據(jù)我了解你的情況,你有 3 個(gè)組件要放在 3 列中。

組件在布局中的位置由特定組件 GridBagConstraints 的gridxgridy值決定

因此,在您的情況下,每個(gè)組件都應(yīng)該具有以下值;

對于colorbutton,gridx = 0 和 gridy = 0

對于游戲名稱,gridx = 1 和 gridy = 0

對于開始,gridx = 2 和 gridy = 0

所以所有 3 個(gè)組件將分布在同一行 (gridy) 和 3 個(gè)不同的列 (gridx)

gridwidth確定您是否要合并任何列。在您的例子中,您將 gridwidth 用作 game_name 標(biāo)簽的 3。因此,您要為此標(biāo)簽合并 3 列。

因此,您的 gridx 值也應(yīng)該更改以支持合并,如下所示;

對于colorbutton,gridx = 0 和 gridy = 0

對于游戲名稱,gridx = 1 和 gridy = 0

對于開始,gridx = 4 和 gridy = 0

您可以通過使用我的第一個(gè) x 和 y 值將網(wǎng)格寬度更改為 1 來獲得相同的輸出

以下將是更正后的代碼;

// Frame Setup

        JFrame frame = new JFrame("GridBagLayout_Test");

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        frame.getContentPane().setBackground(Color.CYAN);

        frame.setLocation(550, 250);

        frame.setSize(800, 550);


        JPanel startScreen = new JPanel(new GridBagLayout());

        startScreen.setBackground(Color.BLACK);

        GridBagConstraints gbc = new GridBagConstraints();

        gbc.weightx = 1;

        gbc.weighty = 1;

        gbc.fill = GridBagConstraints.BOTH;


        JButton colorbutton = new JButton("Color");

        gbc.gridheight = 1;

        gbc.gridwidth = 1;

        gbc.gridx = 0; // change

        gbc.gridy = 0;

        colorbutton.setPreferredSize(new Dimension(100, 30));

        startScreen.add(colorbutton, gbc);


        JLabel game_name = new JLabel("LABEL");

        gbc.gridheight = 1;

        gbc.gridwidth = 3;

        gbc.gridx = 1; // change

        gbc.gridy = 0; // change

        game_name.setBackground(Color.ORANGE);

        game_name.setOpaque(true);

        game_name.setPreferredSize(new Dimension(100, 30));

        startScreen.add(game_name, gbc);


        JButton start = new JButton("START");

        gbc.gridheight = 1;

        gbc.gridwidth = 1;

        gbc.gridx = 4; // change

        gbc.gridy = 0; // change

        start.setPreferredSize(new Dimension(100, 30));

        startScreen.add(start, gbc);


        // Show Results

        frame.add(startScreen);

        frame.setVisible(true);


查看完整回答
反對 回復(fù) 2023-03-31
  • 2 回答
  • 0 關(guān)注
  • 147 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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