Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JLabel背景色不工作?_Java_Swing - Fatal编程技术网

Java JLabel背景色不工作?

Java JLabel背景色不工作?,java,swing,Java,Swing,我正在学习如何用Java创建应用程序 我很难让JLabel有一个背景色,而JPanel是白色的,在它后面。还有,有没有办法将JPanel的大小调整到JFrame的一半 任何帮助都将不胜感激。多谢各位 我无法让JLabel具有背景色,而JPanel为白色 您需要调用setOpaquetrue;在你的JLabel中 还有,有没有办法将JPanel的大小调整到JFrame的一半 您可以使用GridLayout,并在其中放置2个JPanel,这样,您将有2个JPanel,每个JPanel使用JFrame

我正在学习如何用Java创建应用程序

我很难让JLabel有一个背景色,而JPanel是白色的,在它后面。还有,有没有办法将JPanel的大小调整到JFrame的一半

任何帮助都将不胜感激。多谢各位

我无法让JLabel具有背景色,而JPanel为白色

您需要调用setOpaquetrue;在你的JLabel中

还有,有没有办法将JPanel的大小调整到JFrame的一半

您可以使用GridLayout,并在其中放置2个JPanel,这样,您将有2个JPanel,每个JPanel使用JFrame大小的一半

另外,重命名您的类,面板属于AWT中的类的名称,Frame和Label的名称相同,这可能会混淆您和读取代码的人

永远不要扩展JFrame,而是基于JPanel构建GUI。大家都认为这很糟糕

此外,您还应该再次检查,是的,您应该重写getPreferredSize方法

请不要忘记按以下方式更改主方法,将您的程序放在上:

public static void main(String[] args) {
    //Java 8 with lambda expressions
    SwingUtilities.invokeLater(() -> 
        //Your code here
    );
    //Java 7 and below (Or 8 without lambda expressions)
    SwingUtilities.invokeLater(new Runnable() {
        //Your code here
    });
}
现在,根据以上所有建议,您的代码应该如下所示:

import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.GridLayout;

import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class HalfSizePanelWithLabelInDifferentColor {

    private JFrame frame;
    private Container contentPane;
    private JPanel pane;
    private JPanel pane2;
    private JLabel label;

    private static final Dimension dim = new Dimension(100, 100);

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> new HalfSizePanelWithLabelInDifferentColor().createAndShowGui());
    }

    public void createAndShowGui() {
        frame = new JFrame(getClass().getSimpleName());

        contentPane = frame.getContentPane();
        pane = new JPanel() {
            @Override
            public Dimension getPreferredSize() {
                return dim;
            }
        };

        pane2 = new JPanel();

        pane.setOpaque(false);
        pane2.setOpaque(false);

        pane.setBorder(BorderFactory.createLineBorder(Color.RED));
        pane2.setBorder(BorderFactory.createLineBorder(Color.BLUE));

        label = new JLabel("Hello World!");
        label.setBackground(Color.GREEN);
        label.setOpaque(true);

        contentPane.setLayout(new GridLayout(2, 1));

        pane.add(label);

        contentPane.add(pane);
        contentPane.add(pane2);

        contentPane.setBackground(Color.WHITE);

        frame.setContentPane(contentPane);
        frame.pack();
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}
您的输出如下所示:

import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.GridLayout;

import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class HalfSizePanelWithLabelInDifferentColor {

    private JFrame frame;
    private Container contentPane;
    private JPanel pane;
    private JPanel pane2;
    private JLabel label;

    private static final Dimension dim = new Dimension(100, 100);

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> new HalfSizePanelWithLabelInDifferentColor().createAndShowGui());
    }

    public void createAndShowGui() {
        frame = new JFrame(getClass().getSimpleName());

        contentPane = frame.getContentPane();
        pane = new JPanel() {
            @Override
            public Dimension getPreferredSize() {
                return dim;
            }
        };

        pane2 = new JPanel();

        pane.setOpaque(false);
        pane2.setOpaque(false);

        pane.setBorder(BorderFactory.createLineBorder(Color.RED));
        pane2.setBorder(BorderFactory.createLineBorder(Color.BLUE));

        label = new JLabel("Hello World!");
        label.setBackground(Color.GREEN);
        label.setOpaque(true);

        contentPane.setLayout(new GridLayout(2, 1));

        pane.add(label);

        contentPane.add(pane);
        contentPane.add(pane2);

        contentPane.setBackground(Color.WHITE);

        frame.setContentPane(contentPane);
        frame.pack();
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}
注意,我添加了一些彩色边框来显示窗格的开始和结束位置,以及另一个窗格的开始和结束位置

我无法让JLabel具有背景色,而JPanel为白色

您需要调用setOpaquetrue;在你的JLabel中

还有,有没有办法将JPanel的大小调整到JFrame的一半

您可以使用GridLayout,并在其中放置2个JPanel,这样,您将有2个JPanel,每个JPanel使用JFrame大小的一半

另外,重命名您的类,面板属于AWT中的类的名称,Frame和Label的名称相同,这可能会混淆您和读取代码的人

永远不要扩展JFrame,而是基于JPanel构建GUI。大家都认为这很糟糕

此外,您还应该再次检查,是的,您应该重写getPreferredSize方法

请不要忘记按以下方式更改主方法,将您的程序放在上:

public static void main(String[] args) {
    //Java 8 with lambda expressions
    SwingUtilities.invokeLater(() -> 
        //Your code here
    );
    //Java 7 and below (Or 8 without lambda expressions)
    SwingUtilities.invokeLater(new Runnable() {
        //Your code here
    });
}
现在,根据以上所有建议,您的代码应该如下所示:

import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.GridLayout;

import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class HalfSizePanelWithLabelInDifferentColor {

    private JFrame frame;
    private Container contentPane;
    private JPanel pane;
    private JPanel pane2;
    private JLabel label;

    private static final Dimension dim = new Dimension(100, 100);

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> new HalfSizePanelWithLabelInDifferentColor().createAndShowGui());
    }

    public void createAndShowGui() {
        frame = new JFrame(getClass().getSimpleName());

        contentPane = frame.getContentPane();
        pane = new JPanel() {
            @Override
            public Dimension getPreferredSize() {
                return dim;
            }
        };

        pane2 = new JPanel();

        pane.setOpaque(false);
        pane2.setOpaque(false);

        pane.setBorder(BorderFactory.createLineBorder(Color.RED));
        pane2.setBorder(BorderFactory.createLineBorder(Color.BLUE));

        label = new JLabel("Hello World!");
        label.setBackground(Color.GREEN);
        label.setOpaque(true);

        contentPane.setLayout(new GridLayout(2, 1));

        pane.add(label);

        contentPane.add(pane);
        contentPane.add(pane2);

        contentPane.setBackground(Color.WHITE);

        frame.setContentPane(contentPane);
        frame.pack();
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}
您的输出如下所示:

import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.GridLayout;

import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class HalfSizePanelWithLabelInDifferentColor {

    private JFrame frame;
    private Container contentPane;
    private JPanel pane;
    private JPanel pane2;
    private JLabel label;

    private static final Dimension dim = new Dimension(100, 100);

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> new HalfSizePanelWithLabelInDifferentColor().createAndShowGui());
    }

    public void createAndShowGui() {
        frame = new JFrame(getClass().getSimpleName());

        contentPane = frame.getContentPane();
        pane = new JPanel() {
            @Override
            public Dimension getPreferredSize() {
                return dim;
            }
        };

        pane2 = new JPanel();

        pane.setOpaque(false);
        pane2.setOpaque(false);

        pane.setBorder(BorderFactory.createLineBorder(Color.RED));
        pane2.setBorder(BorderFactory.createLineBorder(Color.BLUE));

        label = new JLabel("Hello World!");
        label.setBackground(Color.GREEN);
        label.setOpaque(true);

        contentPane.setLayout(new GridLayout(2, 1));

        pane.add(label);

        contentPane.add(pane);
        contentPane.add(pane2);

        contentPane.setBackground(Color.WHITE);

        frame.setContentPane(contentPane);
        frame.pack();
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}

请注意,我添加了一些彩色边框以显示窗格的开始和结束位置,以及另一个窗格的开始和结束位置

JPanel有多大,取决于两个因素1您使用的布局管理器2您传递给panel.setPreferredSize的内容。在某些情况下,首选大小不会影响任何内容,具体取决于有效的布局。布局管理器运行时使用setSize不会产生任何效果。在您的例子中,因为您使用的是BorderLayout,并且只在中间放置了一些东西,所以JPanel将增长到窗口的完整大小。如果您希望框架是面板的首选大小,您可能需要考虑使用JFrime.PoT而不是StSig. JPanel是多大的,由两件事决定:1您使用的布局管理器2。在某些情况下,首选大小不会影响任何内容,具体取决于有效的布局。布局管理器运行时使用setSize不会产生任何效果。在您的例子中,因为您使用的是BorderLayout,并且只在中间放置了一些东西,所以JPanel将增长到窗口的完整大小。如果您希望框架的大小为面板的首选大小,您可能需要考虑使用JFrime.PACK而不是SETSIZE。