gpt4 book ai didi

Java JLabel 背景颜色不起作用?

转载 作者:行者123 更新时间:2023-12-02 02:55:16 30 4
gpt4 key购买 nike

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

我无法让 JLabel 具有背景颜色,而 JPanel 后面是白色的。另外,有没有办法将 JPanel 的大小调整为 JFrame 的一半?

任何帮助将不胜感激。谢谢。


   package PracticeOne;

import java.awt.BorderLayout;

public class PracticeOne {

public static void main(String[] args) {


Frame container = new Frame();
Panel box = new Panel();
Label txt = new Label();

box.add(txt);

container.add(box, BorderLayout.CENTER);


}

}

package PracticeOne;

import javax.swing.JFrame;

public class Frame extends JFrame {

/**
*
*/
private static final long serialVersionUID = 1L;

Frame(){
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

this.setSize(500, 500);

this.setVisible(true);

this.setLocationRelativeTo(null);

this.setTitle("Testing this out");
}

}

package PracticeOne;

import java.awt.Color;
import java.awt.Dimension;
import javax.swing.JPanel;

public class Panel extends JPanel {

/**
*
*/
private static final long serialVersionUID = 1L;


public Dimension d = new Dimension(100,100);

Panel(){
this.setSize(d);
this.setAlignmentX(CENTER_ALIGNMENT);
this.setBackground(Color.WHITE);

}



}

package PracticeOne;

import java.awt.Color;

import javax.swing.JLabel;

public class Label extends JLabel {

/**
*
*/
private static final long serialVersionUID = 1L;



Label(){
this.setSize(50, 50);


this.setText("ya boy is working here");
this.setForeground(Color.BLACK);
this.setBackground(Color.ORANGE);

}
}

最佳答案

I'm having trouble getting the JLabel to have a background color whilst the JPanel is white

您需要在JLabel中调用setOpaque(true);

Also, is there a way to resize the JPanel to half of what the JFrame is?

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

另外,重命名你的类,Panel属于AWT中的类名,FrameLabel也是如此,这可能会让人困惑你的(以及任何读你代码的人)。

永远不要扩展 JFrame,而是基于 JPanel 构建 GUI。请参阅extends JFrame vs creating it inside of classThe use of multiple JFrames, Good / Bad practice?普遍的共识是这很糟糕。

此外,您还应该检查 Should I avoid the use of setPreferred|Maximum|MinimumSize() in Swing?再说一次,是的,您应该重写 getPreferredSize() 方法。

不要忘记将您的程序放在Event Dispatch Thread (EDT)上通过如下更改您的 main() 方法:

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);
}
}

你的输出将是这样的:

enter image description here

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

关于Java JLabel 背景颜色不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43190955/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com