gpt4 book ai didi

java - Swing:灰色多行JCheckBox?

转载 作者:行者123 更新时间:2023-12-01 11:57:43 25 4
gpt4 key购买 nike

我想要一个包含多行文本的复选框,但有时我想禁用它。

  • 简单的 JCheckBox 工作正常,但会被禁用,但它不是多行的。
  • 放置 line1
    line2 提供正确的大小和布局,但是当我禁用该控件时,只有复选框本身变灰,文本保持黑色。
  • 我知道我可以将 HTML 文本颜色更改为灰色,但这对于“经典 Windows”外观不起作用,其中禁用的文本应呈现为“凹陷”。或者,实际上它可以工作,但外观会与附近其他禁用的控件不同,这不好。
  • 我可以创建一个简单的 JCheckBox,其中包含第一行文本和包含第二行的 JLabel,并同时禁用它们,但单击第二行(JLabel)不会激活复选框,并且单击复选框会显示键盘只关注第一行,这会让用户感到困惑。

是否可以将复选框及其标签作为单独的控件,并在它们之间建立某种链接,如 HTML 中那样?也许我可以用这个做点东西。

是否可以子类化 JButton 并重写其中的某些内容,例如,更改焦点矩形的绘制方式?该矩形是由 com.sun.java.swing.plaf.windows.WindowsButtonUI 绘制的,但我有点害怕对该类进行子类化,因为它在标准库中太深了,并且我的应用程序可能会因新的 JRE 而中断。

编辑 04.02.2015:以上内容适用于 Java 1.6。在 Java 1.7 及更高版本中,禁用多行复选框会更改其外观,但它看起来仍然与禁用的单行复选框不同;特别是,在经典 Windows 主题上,文本不会凹陷。


(来源:keep4u.ru)

最佳答案

我可能遗漏了一些东西,但我只是禁用了 JCheckBox 和 JLabel。

使用 Java 1.7 和 Windows Vista。

Enabled Check Box Disabled Check Box

这是代码

package com.ggl.testing;

import java.awt.BorderLayout;

import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JToggleButton;
import javax.swing.SwingUtilities;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

public class CheckBoxTest implements Runnable {

private JCheckBox checkBox;

private JLabel multiLineLabel;

private JFrame frame;

@Override
public void run() {
frame = new JFrame("Check Box Test");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

JPanel mainPanel = new JPanel();
mainPanel.setLayout(new BorderLayout());

JPanel checkBoxPanel = new JPanel();

checkBox = new JCheckBox();
checkBoxPanel.add(checkBox);

String s = "<html>When in the course of human events it becomes"
+ "<br>necessary for one people to dissolve the political"
+ "<br>bands which have connected them with another and to"
+ "<br>assume among the powers of the earth, the separate"
+ "<br>and equal station to which the Laws of Nature and"
+ "<br>of Nature's God entitle them, a decent respect to the"
+ "<br>opinions of mankind requires that they should declare"
+ "<br>the causes which impel them to the separation.";
multiLineLabel = new JLabel(s);
multiLineLabel.setLabelFor(checkBox);
checkBoxPanel.add(multiLineLabel);

mainPanel.add(checkBoxPanel, BorderLayout.CENTER);

JPanel toggleButtonPanel = new JPanel();

JToggleButton toggleButton = new JToggleButton("Disable Checkbox");
toggleButton.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent event) {
JToggleButton toggleButton = (JToggleButton) event.getSource();
if (toggleButton.isSelected()) {
checkBox.setEnabled(false);
multiLineLabel.setEnabled(false);
} else {
checkBox.setEnabled(true);
multiLineLabel.setEnabled(true);
}
}
});
toggleButtonPanel.add(toggleButton);

mainPanel.add(toggleButtonPanel, BorderLayout.SOUTH);

frame.add(mainPanel);

frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}

public static void main(String[] args) {
SwingUtilities.invokeLater(new CheckBoxTest());
}

}

关于java - Swing:灰色多行JCheckBox?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28303512/

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