说我有一个
JToggleButton but = new JToggleButton("OK") ;
现在我需要but点击它的状态.我的意思是我需要知道它是否被点击了.
我正在使用Swing with Eclipse和Window Builder Pro创建Java GUI.我正在使用JButtons和JToggleButtons.我想从另一个按钮更改切换按钮的状态.

例如,当我单击清除网格时,所有切换按钮都将被"未选中".
我怎样才能做到这一点?我必须使用哪些方法来切换按钮和按钮?
是否有标准实现或库在Swing中提供GUI切换开关?我知道Swing提供了一个切换按钮,但UX有点不尽如人意.我在找这个:

此外,这种控制是否有规范术语?Apple HIG将其称为UISwitch.我也尝试过搜索"拨动开关",但我没有太多运气.(大量的JavaScript结果,但没有任何原生.)
在a中使用时Windows 7 JToolBar,JToggleButton有时会截断其标签文本.
请参阅下面的代码中的示例.以大写字母开头的切换按钮'W'将被截断; 一个以空格(或甚至是小写'w')开头的人不会.
这只发生在Windows?有人可以解释为什么会这样吗?
// http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6386636
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JFrame;
import javax.swing.JToggleButton;
import javax.swing.JToolBar;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
/////////////////////// new class
public class Truncation_Example extends JToolBar {
   private static final long serialVersionUID = 1L;
   /////////////////////// object attributes
   JToggleButton toggle_Good;
   JToggleButton toggle_Bad;
   /////////////////////// constructors
   public Truncation_Example() {
      toggle_Good = new JToggleButton(new Action_Good());
      toggle_Bad = new JToggleButton(new Action_Bad());
      this.add(toggle_Good);
      this.add(toggle_Bad);
   }
   /////////////////////// …我试图以JToggleButton可靠,外观和感觉独立的方式改变它的颜色.
如果使用Metal L&F,那么使用UIManager是一种方法:
UIManager.put("ToggleButton.selected", Color.RED);
注意:Iyy指出我上面的属性名称中有一个拼写错误,但我会将其留在上面,以便人们到达这里,但实际的属性名称应该是:
UIManager.put("ToggleButton.select", Color.RED);
但是,这在我目前的外观(目前是Windows XP)中不起作用.经过一些进一步的分析,似乎Windows中的系统外观(仍然是XP)根本不使用任何Color基于UIManager属性的属性ToggleButton,或者它至少不提供它们本身(有一个在线快速查找的UIManager例子)来自的所有属性键,在示例中明确地明确限制Color属性).
我试过设置背景颜色:
Action action = new AbstractAction() {
    @Override
    public void actionPerformed(ActionEvent e) { /* stuff */ }
};
JToggleButton button = new JToggleButton(action);
// tried with and without opaque true
button.setOpaque(true);
button.setBackground(Color.RED);
它不仅不会改变选定的状态,而且甚至不会影响未选择的状态.
我在尝试接收动作后尝试更改背景颜色:
@Override
public void actionPerformed(ActionEvent e)
{
    JToggleButton button = (JToggleButton)e.getSource();
    if (button.isSelected()) // alternatively, (Boolean)getValue(Action.SELECTED_KEY)
    {
        button.setBackground(Color.RED);
    }
}
这些都不起作用.我发现工作的唯一要求是我自己在选定状态下绘制按钮(这导致一个工作示例,虽然看起来非标准): …
我目前正在尝试创建一组切换按钮,这些按钮类似于Eclipse的格式化程序首选项中使用的按钮:

目前我已通过以下方式尝试此操作:
public class Exercise extends JFrame {
    private String[] buttonNames = {"A", "B", "C", "D", "E"};
    Exercise() {
        final JPanel topPanel = new JPanel();
        topPanel.setLayout(new GridBagLayout());
        GridBagConstraints c = new GridBagConstraints();
        int tabCount = 0;
        final ButtonGroup topButtonGroup = new ButtonGroup();
        for (String buttonName : buttonNames) {
            JToggleButton tabButton = new JToggleButton(buttonName);
            topButtonGroup.add(tabButton);
            c.fill = GridBagConstraints.HORIZONTAL;
            c.insets = new Insets(0, -6, 0, -7); // Questionable line
            c.gridx = tabCount;
            c.gridy = 0;
            topPanel.add(tabButton, c);
            tabCount++;
        }
        this.add(topPanel);
        this.setVisible(true);
        this.pack(); …我想在Java Swing应用程序中创建一组按钮,就像在绘图程序中的典型工具调色板中一样.也就是说,一组小方形按钮,每个按钮都包含一个图标,其中只有一个被按下,当你按下另一个按钮时,第一个按钮被取消选择.我已经想到了许多解决方案,但它们似乎都不是很容易/优雅.
这听起来像JRadioButton的工作,但如果你添加一个Icon,你仍然会得到一个小圆圈,这是相当低效的空间.我想一个选择是为JRadioButton找到另一种外观和感觉或绘画代码.
另一个替代方案可能是将JButton添加到ButtonGroup,可能将JToggleButton.ToggleButtonModel设置为模型,但是没有所需的效果,因为标准JButton的绘制代码在选择时不会使其保持低调.可能会修改JButton代码来执行此操作.就像让它"按下"一样"选择"它.
第三种选择是使用普通的JButton,并添加一个常用的鼠标监听器,让它们保持按下或不按,并在按钮之间传递变化.
有人可以建议达到目标的最佳途径吗?我错过的一个简单的方法是最好的,但建议这三种选择中的哪一种最好,并指出如何开始也是有用的.
我需要一个JToggleButton(具有自定义背景),其中包含一个JPanel,其中包含多个JLabel.那部分有效.
此按钮随后放在JTable单元格中,并由用户按下.问题是我只能在第二次点击时按下按钮.在第一次点击时,首先使用JLabel跳转到面板,然后再转到实际按钮.
我尝试了几件事来尝试解决这个问题,但同样的问题仍然存在.A)将带有标签的JPanel直接放在JToggleButton#add()上.B)使用JLayeredPane将Button和JPanel放置到不同的层上,其中JToggleButton采用约束整数( - ),以便具有JLabel的JPanel保持在顶部可见
你有什么建议吗?谢谢
下面是一个示例代码,说明了该问题.单击该按钮仅适用于第二次.
public class ClickableCustomButtonInTable extends JToggleButton {
public ClickableCustomButtonInTable() {
    Dimension d = new Dimension(100, 100);
    JLabel lFirst = new JLabel("1st label");
    lFirst.setPreferredSize(d);
    JLabel lSecond = new JLabel("2nd label");
    lSecond.setPreferredSize(d);
    JPanel panel = new JPanel();
    panel.setOpaque(true);
    panel.setLayout(new BorderLayout());
    panel.add(lFirst, BorderLayout.NORTH);
    panel.add(lSecond, BorderLayout.SOUTH);
    add(panel);
    addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            System.out.println("Button clicked");
        }
    });
}
private static class CustomButtonRenderer implements TableCellRenderer {
    private final ClickableCustomButtonInTable button = new ClickableCustomButtonInTable();
    @Override
    public Component …当有人在文本字段中输入任何内容时,如何使切换按钮自动切换?我正在使用java Net-beans
java ×10
jtogglebutton ×10
swing ×10
jbutton ×2
jtable ×2
icons ×1
jlayeredpane ×1
jradiobutton ×1
jtableheader ×1
label ×1
layout ×1
listeners ×1
netbeans ×1
uimanager ×1
uiswitch ×1