未在 JTextArea 下方绘制背景颜色
Background color not being painted underneath JTextArea
我正在使用 Swing 创建 GUI。我有一个 JPanel
、PanelOne
,它的背景颜色是蓝色。在面板上,我有一个 JTextArea
、instructions
,它的背景颜色也是蓝色,不透明设置为 true。
启动程序后,一切看起来都很好,说明是蓝色背景和黑色文本。在代码中,当我不再希望显示说明时,我会调用 instructions.setVisible(false)
。但是,当我这样做时,标签所在的位置会留下一个灰色的大框。从我读到的内容来看,我认为让标签不透明可以解决这个问题,但事实似乎并非如此。如何保证标签下的区域也被涂成蓝色?
如果您不想再显示说明,您可以这样做
PanelOne.remove(instructions);
PanelOne.revalidate();
PanelOne.repaint();
不要将标签设置为不透明或尝试隐藏它。一旦文本无关紧要,请调用 label.setText("");
。完成!
没有文本、可见边框或图标的标签是不可见的。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.EmptyBorder;
public class HideLabel {
private JComponent ui = null;
HideLabel() {
initUI();
}
public final void initUI() {
if (ui!=null) return;
ui = new JPanel(new BorderLayout());
ui.setBorder(new EmptyBorder(4,4,4,4));
ui.setBackground(Color.CYAN);
final JLabel label = new JLabel("Click the button!");
ui.add(label);
AbstractAction action = new AbstractAction("'Hide' the label") {
@Override
public void actionPerformed(ActionEvent e) {
label.setText("");
}
};
JButton hideButton = new JButton(action);
ui.add(hideButton, BorderLayout.LINE_END);
}
public JComponent getUI() {
return ui;
}
public static void main(String[] args) {
Runnable r = () -> {
HideLabel o = new HideLabel();
JFrame f = new JFrame(o.getClass().getSimpleName());
f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
f.setLocationByPlatform(true);
f.setContentPane(o.getUI());
f.pack();
f.setMinimumSize(f.getSize());
f.setVisible(true);
};
SwingUtilities.invokeLater(r);
}
}
我错了,它实际上是 JScrollPane 内部的一个 JTextArea 留下了灰色框,而不是我最初认为的 JLabel。我已经更新了问题和标题以反映这一点。解决方案非常简单——我必须为包含我的 JTextArea 的 JScrollPane 将不透明设置为 true。感谢所有回答提示的人!
我正在使用 Swing 创建 GUI。我有一个 JPanel
、PanelOne
,它的背景颜色是蓝色。在面板上,我有一个 JTextArea
、instructions
,它的背景颜色也是蓝色,不透明设置为 true。
启动程序后,一切看起来都很好,说明是蓝色背景和黑色文本。在代码中,当我不再希望显示说明时,我会调用 instructions.setVisible(false)
。但是,当我这样做时,标签所在的位置会留下一个灰色的大框。从我读到的内容来看,我认为让标签不透明可以解决这个问题,但事实似乎并非如此。如何保证标签下的区域也被涂成蓝色?
如果您不想再显示说明,您可以这样做
PanelOne.remove(instructions);
PanelOne.revalidate();
PanelOne.repaint();
不要将标签设置为不透明或尝试隐藏它。一旦文本无关紧要,请调用 label.setText("");
。完成!
没有文本、可见边框或图标的标签是不可见的。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.EmptyBorder;
public class HideLabel {
private JComponent ui = null;
HideLabel() {
initUI();
}
public final void initUI() {
if (ui!=null) return;
ui = new JPanel(new BorderLayout());
ui.setBorder(new EmptyBorder(4,4,4,4));
ui.setBackground(Color.CYAN);
final JLabel label = new JLabel("Click the button!");
ui.add(label);
AbstractAction action = new AbstractAction("'Hide' the label") {
@Override
public void actionPerformed(ActionEvent e) {
label.setText("");
}
};
JButton hideButton = new JButton(action);
ui.add(hideButton, BorderLayout.LINE_END);
}
public JComponent getUI() {
return ui;
}
public static void main(String[] args) {
Runnable r = () -> {
HideLabel o = new HideLabel();
JFrame f = new JFrame(o.getClass().getSimpleName());
f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
f.setLocationByPlatform(true);
f.setContentPane(o.getUI());
f.pack();
f.setMinimumSize(f.getSize());
f.setVisible(true);
};
SwingUtilities.invokeLater(r);
}
}
我错了,它实际上是 JScrollPane 内部的一个 JTextArea 留下了灰色框,而不是我最初认为的 JLabel。我已经更新了问题和标题以反映这一点。解决方案非常简单——我必须为包含我的 JTextArea 的 JScrollPane 将不透明设置为 true。感谢所有回答提示的人!