簡體   English   中英

Java Swing libaray 出現奇怪的渲染問題

[英]Strange rendering issue with Java Swing libaray

背景我想使用java swing庫創建一個 GUI 應用程序。 對於布局,我要求它是一個 GridLayout,因為程序大綱需要它。

旨在渲染一個面板,其中包含文本。

我有什么累

  • 使用 setBounds 移動文本 - 這有效並且文本確實呈現,但它不適用於 GridLayout,因此不符合要求的規格。
  • 閱讀有關 GridLayout 和 JLabel 呈現的文章和文檔 - 嘗試了這些示例 - 失敗了。
  • 使用 intellij 調試器 - 結果顯示 JLabel 不是 null,文本設置為正確的值,啟用和可見屬性為真。
  • 增加和減少 GirdLayout 行和列 - 失敗。
  • 改變面板的大小 - 失敗。
  • 將前景色更改為綠色之類的顏色 - 失敗。

代碼

public class MainPanel extends JPanel {
    public MainPanel(JFrame frame) {
        setBounds(40,40,200,200);
        setBackground(Color.BLUE);

        JLabel label = new JLabel("Hello World", SwingConstants.CENTER);
        label.setFont(new Font("Tahoma", Font.PLAIN, 25));
        label.setVisible(true);
        add(label);

        setLayout(new GridLayout(1, 1));
    }

}

結果
在此處輸入圖像描述

結論如您所見,面板確實呈現(藍色方塊),但是其中沒有文本。 我很困惑,因為與此非常相似的代碼已經在另一個項目中使用過,並且沒有明顯的理由表明它不起作用。

您的代碼基本上可以滿足我提到的條件。 證明:(顯然你可以分離出你自己的class作為后面的頂級):

import java.awt.Color;
import java.awt.EventQueue;
import java.awt.Font;
import java.awt.GridLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingConstants;


public class F extends JFrame {
    private void setGui() {
        try {
            setLocation(0, 100);
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            setContentPane(new MainPanel());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        try {
            EventQueue.invokeAndWait(() -> {
                F f = new F();
                f.setGui();
                f.setSize(200, 200);
                f.setVisible(true);
            });
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}
class MainPanel extends JPanel {
    public MainPanel() {
        setLayout(new GridLayout(1, 1));
        setBounds(40,40,200,200);
        setBackground(Color.BLUE);
        JLabel label = new JLabel("Hello World", SwingConstants.CENTER);
        label.setFont(new Font("Tahoma", Font.PLAIN, 25));
        add(label);
    }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM