- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我创建了一个 JPanel,其中包含网格形式的 ItemTest
类的 9 个实例。
ItemTest
类包含它自己的 JPanel、一个复选框和一些文本。它用于表示可以购买的不同元素。我希望能够更改属于 ItemTest 类的 JPanel 组件的大小和颜色。
setSize 方法和 setForeground 方法在这里似乎不起作用。 this.setSize(100,100)
和 this.setForeground(new java.awt.Color(80,80,90))
对 JPanel 没有影响。
import javax.swing.JPanel;
import java.awt.GraphicsConfiguration;
import java.awt.GridLayout;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class ItemTest extends JPanel{
static JPanel secondPanel = new JPanel();
private static final long serialVersionUID = 8013287075740780359L;
static JCheckBox selectBox;
static GraphicsConfiguration gc;
static JFrame frame = new JFrame(gc);
ItemTest(String name, double cost){
JLabel nameLabel = new JLabel();
this.add(nameLabel);
nameLabel.setText(name);
selectBox = new JCheckBox("$"+cost);
this.setForeground(new java.awt.Color(80, 80, 90));
this.setSize(100, 100);
this.add(selectBox);
}
public static void main(String[] args) {
frame.setVisible(true);
frame.setTitle("Program");
frame.setSize(1000,800);
frame.setResizable(false);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(null);
frame.setLocationRelativeTo(null);
frame.getContentPane().setBackground(new java.awt.Color(100,100,110));
secondPanel.setBounds(345,40,640,700);
secondPanel.setBackground(new java.awt.Color(90,90,100));
secondPanel.setLayout(new GridLayout(3,3,50,50));
secondPanel.setVisible(true);
secondPanel.getComponents();
frame.add(secondPanel);
for (int i = 0; i < 9; i ++) {
secondPanel.add(new ItemTest("T-Shirt",50));
System.out.println("test");
}
}
}
<小时/>
编辑:
在阅读了一些改进我的代码的建议后,我对我的类(class)做了一些更改。
import javax.swing.JPanel;
import java.awt.Color;
import java.awt.GraphicsConfiguration;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class ItemTest extends JPanel{
private static final long serialVersionUID = 8013287075740780359L;
static GraphicsConfiguration gc;
static JFrame frame = new JFrame(gc);
ItemTest(String name, double cost){
JLabel nameLabel = new JLabel();
this.add(nameLabel);
nameLabel.setText(name);
JCheckBox selectBox = new JCheckBox("$"+cost);
this.add(selectBox);
//Changes colour of the text, but I want that to remain black. I'm looking to change the colour of the actuall JPanel.
selectBox.setForeground(Color.red);
nameLabel.setForeground(Color.red);
}
public static void main(String[] args) {
frame.setTitle("Program");
frame.setSize(1000,800);
frame.setResizable(false);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout( new GridBagLayout() );
frame.setLocationRelativeTo(null);
frame.getContentPane().setBackground(new java.awt.Color(100,100,110));
frame.setVisible(true);
JPanel secondPanel = new JPanel();
//secondPanel.setBounds(345,40,640,700);
secondPanel.setBackground(new java.awt.Color(90,90,100));
secondPanel.setLayout(new GridLayout(3,3,50,50));
secondPanel.setVisible(true);
secondPanel.getComponents();
frame.add(secondPanel);
for (int i = 0; i < 9; i ++) {
secondPanel.add(new ItemTest("T-Shirt",50));
}
}
}
更改 setBounds
方法删除了我首选的 JPanel 大小,因此现在所有项目都位于窗口的中心,而不是我之前的设计,其中它们包含在 jpanel 中侧面。
使用
selectBox.setForeground(Color.red);
nameLabel.setForeground(Color.red);
将文本颜色设置为红色。我想更改 JPanel 的背景颜色,并将文本颜色保持为黑色。
我希望将这些项目放置在面板的侧面,如我的原始代码所示,尺寸为 50x50。
最佳答案
static JCheckBox selectBox;
不要使用静态变量 Swing 组件应该是在 ItemTest 类中定义的实例变量。
this.setForeground(new java.awt.Color(80, 80, 90));
在 JPanel 上设置前景不会执行任何操作,因为 JPanel 上没有自定义绘制。
您需要在 JLabel 和 JCheckbox 上设置前景。
this.setSize(100, 100);
不要使用 setSize(...)。正如您所注意到的,它将被忽略。
Swing 被设计为与布局管理器一起使用。 JPanel 的默认布局是 FlowLayout。 JLabel 和 JCheckBox 都将以其首选大小显示。
如果您希望面板上有额外的空间,则可以使用EmptyBorder
。阅读 Swing 教程中关于 How to Use Borders 的部分了解更多信息和工作示例。
frame.setLayout(null);
secondPanel.setBounds(345,40,640,700);
不要使用 null 布局和 setBounds(...)。
而是使用类似的东西:
frame.setLayout( new GridBagLayout() );
面板的大小将自动由您添加到面板的组件决定。
编辑:
I'm looking to change the colour of the actuall JPanel
然后使用 setBackground(...)
(而不是 setForeground(...))更改面板的背景。
, so now all of the items are in the centre of the window, instead of my previous design where they were contained in a jpanel off to the side.
是的,这是 GridBagLayout 的默认行为。如果您不喜欢这样,那么您可以在框架上使用不同的布局管理器。阅读 Layout Managers 上的教程。最简单的可能是 FlowLayout。您可以指定对齐方式为左对齐。
with dimensions say 50x50.
不要使用随机数。您不知道标签和复选框的文本是否可以以 50 像素显示。我已经告诉过你如何使面板尺寸更大。阅读有关边框的教程!!!
static GraphicsConfiguration gc;
static JFrame frame = new JFrame(gc);
您仍在使用静态变量。摆脱它们,它们是不需要的。
frame.setVisible(true);
这应该是所有组件添加到框架后的最后一条语句。实际上代码应该是:
frame.pack();
frame.setVisible( true );
然后所有组件都会以其首选尺寸完美显示。
阅读教程,教程中的每个部分都有工作示例,您可以下载并使用。本教程将向您展示如何更好地构建代码。
关于java - 更改 JPanel 的颜色和尺寸不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58118979/
今天有小伙伴给我留言问到,try{...}catch(){...}是什么意思?它用来干什么? 简单的说 他们是用来捕获异常的 下面我们通过一个例子来详细讲解下
我正在努力提高网站的可访问性,但我不知道如何在页脚中标记社交媒体链接列表。这些链接指向我在 facecook、twitter 等上的帐户。我不想用 role="navigation" 标记这些链接,因
说现在是 6 点,我有一个 Timer 并在 10 点安排了一个 TimerTask。之后,System DateTime 被其他服务(例如 ntp)调整为 9 点钟。我仍然希望我的 TimerTas
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我就废话不多说了,大家还是直接看代码吧~ ? 1
Maven系列1 1.什么是Maven? Maven是一个项目管理工具,它包含了一个对象模型。一组标准集合,一个依赖管理系统。和用来运行定义在生命周期阶段中插件目标和逻辑。 核心功能 Mav
我是一名优秀的程序员,十分优秀!