有没有办法改变复选框/单选按钮的选择颜色?

这是一个简单的图形程序,可以在屏幕上添加一些星星.
import acm.graphics.*;
import acm.program.*;
import java.awt.event.*;
import javax.swing.*;
/**
* This program creates a five-pointed star every time the
* user clicks the mouse on the canvas.
*/
public class DrawStarMap1 extends GraphicsProgram {
public void init() {
/* Initializes the mouse listeners */
addMouseListeners();
/* The check box starts out in the "on" position */
fillCheckBox = new JCheckBox("Filled");
fillCheckBox.setSelected(true);
add(fillCheckBox, SOUTH);
/* Clears the screen with a button */
add(new JButton("Clear"), SOUTH);
addActionListeners();
}
/* Called whenever …Run Code Online (Sandbox Code Playgroud) 我创建了一个简单JTable的复选框,如下所示:
DefaultTableModel model = new DefaultTableModel();
jTable1.setModel(model);
model.addColumn("No:", no1);
model.addColumn("Remark", remark1);
model.addColumn("Color", colors1);
model.addColumn("Done");
TableColumn col1 = jTable1.getColumnModel().getColumn(0);
col1.setPreferredWidth(1);
TableColumn col4 = jTable1.getColumnModel().getColumn(3);
col4.setCellEditor(jTable1.getDefaultEditor(Boolean.class));
col4.setCellRenderer(jTable1.getDefaultRenderer(Boolean.class));
col4.setPreferredWidth(50);
jTable1.setShowGrid(true);
jTable1.setGridColor(Color.BLACK);
jTable1.setAutoCreateRowSorter(true);
Run Code Online (Sandbox Code Playgroud)
它工作正常,但如果我想为复选框添加动作监听器该怎么办.例如,当我选中我的复选框时,我需要弹出一条确认消息.
在Java上,如果选中复选框A,有没有办法禁用复选框(称之为B).
当我说禁用时,用户无法检查它..它是setEditable(false)还是什么的.
我有一组实现特定接口的类,我有一组复选框.如果没有选中复选框,我想抛出一个错误.如果选择了至少一个或多个复选框,则应创建与该复选框关联的对象.
这就是我的表现.
interface U { ... }
class A implements U { ... }
class B implements U { ... }
class C implements U { ... }
class Main {
//....
//....
public void findSelectedCheckBoxesAndCreateObjects() {
if(!(checkboxA.isSelected() || checkboxB.isSelected() || checkboxC.isSelected()) {
System.out.println("No checkboxes selected");
return;
}
//if any selected, create associated object
if(checkboxA.isSelected()) new A(file);
if(checkboxB.isSelected()) new B(file);
if(checkboxC.isSelected()) new C(file);
}
}
Run Code Online (Sandbox Code Playgroud)
现在我有3个问题.
|| checkboxD.isSelected()每次我有一个新类来检查它时,我都不能继续添加.if(checkboxD.isSelected()) new D(file);为每节课增加.它非常不优雅.我可以使用某种循环来删除冗余代码吗?
请给我你的建议.谢谢.
请查看以下代码
import java.awt.GridLayout;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
public class TestSend extends JFrame
{
private Box names, emails;
private JButton ok;
private Map mMap;
private JLabel nameLabel, emailLabel;
private JPanel mainPanel;
private JScrollPane scroll;
private JTable table;
private Object[][] data;
private int counter = 0;
private List nameHolder;
private String[] colNames = {"Names","Emails"};
public TestSend() …Run Code Online (Sandbox Code Playgroud) 我想创建带有复选框和多个选择的JComboBox.我在渲染jlist后创建了一个带复选框的列表.我不知道如何用jcombobox渲染它.或者是否可以将jlist作为下拉列表组成,如组合框.对于jlist渲染我使用以下代码
DefaultListModel listModel = new DefaultListModel();
ListCheckBox li= new ListCheckBox(listModel);
JScrollPane jsp= new JScrollPane(li);
add(jsp);
listModel.add(0,new JCheckBox("Other Court"));
listModel.add(0,new JCheckBox("Tribunal Court"));
listModel.add(0,new JCheckBox("High Court"));
listModel.add(0,new JCheckBox("Supreme Court"));
Run Code Online (Sandbox Code Playgroud)
ListCheck Box类如下
import javax.swing.*;
import javax.swing.border.*;
import java.awt.*;
import java.awt.event.*;
public class ListCheckBox extends JList
{
protected static Border noFocusBorder =
new EmptyBorder(1, 1, 1, 1);
public ListCheckBox(DefaultListModel model)
{
super(model) ;
setCellRenderer(new CellRenderer());
addMouseListener(new MouseAdapter()
{
public void mousePressed(MouseEvent e)
{
int index = locationToIndex(e.getPoint());
if (index != -1) {
JCheckBox checkbox …Run Code Online (Sandbox Code Playgroud) 这里仍然是一个Java新手,为了我自己的利益而尝试过于先进.不过,这就是我需要做的:JXTreeTable中的一个复选框.我的主要课程:
package info.chrismcgee.sky.production;
import info.chrismcgee.sky.production.treetable.NoRootTreeTableModel;
import java.awt.Checkbox;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.ScrollPaneConstants;
import javax.swing.border.EmptyBorder;
import javax.swing.border.EtchedBorder;
import net.miginfocom.swing.MigLayout;
import org.jdesktop.swingx.JXTreeTable;
public class TestFrame extends JFrame {
/**
*
*/
private static final long serialVersionUID = -1899673458785493250L;
private JXTreeTable treeTable;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
TestFrame frame = new TestFrame();
frame.setVisible(true);
} catch …Run Code Online (Sandbox Code Playgroud) 我在更改文件选择器中附件组件的位置时遇到问题.
我通过在文件选择器的附件组件中放置一个复选框来自定义保存文件对话框.但是复选框的位置不好,真的很难看.
我可以将附件组件移动到文件窗格下面吗?怎么做?
或者,如果您有其他解决方案来做同样的事情,也欢迎.
感谢你们.
我使用以下代码添加复选框:
JFileChooser fc = new JFileChooser(file)
JPanel accessory = new JPanel();
JCheckBox isOpenBox = new JCheckBox("Open file after saving");
accessory.setLayout(new BorderLayout());
accessory.add(isOpenBox, BorderLayout.SOUTH);
fc.setAccessory(accessory);
Run Code Online (Sandbox Code Playgroud)
在此屏幕截图中,复选框的位置不佳.

这个截图是我想要的确切效果.

我已经检查了无处可修复但没有任何方法可以使我的复选框出现.我将它添加到面板并将面板添加到窗口.按钮出现所以它必须是复选框的问题.这是我的代码:
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Point;
import java.awt.Toolkit;
import java.awt.event.KeyEvent;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class MainApplication {
public static Toolkit tk = Toolkit.getDefaultToolkit();
public static void main(String[] args) {
MainApplication instance = new MainApplication();
instance.start();
}
private JFrame window;
private JPanel mainPanel;
private JPanel contingencyPanel;
private JButton applyButton = new JButton("Apply Changes");
private JCheckBox autoRedLightBox = new JCheckBox("Red Light");
private JCheckBox autoYellowLightBox = new JCheckBox("Yellow Light");
private JCheckBox autoGreenLightBox = new JCheckBox("Green Light");
private …Run Code Online (Sandbox Code Playgroud) java ×10
jcheckbox ×10
swing ×10
jtable ×2
code-reuse ×1
coding-style ×1
jbutton ×1
jcombobox ×1
jfilechooser ×1
jlabel ×1
jlist ×1
jradiobutton ×1
jslider ×1
jxtreetable ×1
swingx ×1
uimanager ×1