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