Chr*_*uns 1 java user-interface swing color-picker
我正在将 python/Qt GUI 应用程序转换为 Java/Swing。当用户拖动 QColorDialog 中的滑块时,原始应用程序会连续精美地更新场景颜色。如何在 JColorChooser 中获得类似的效果?我发现的所有示例仅在用户单击“应用”或“确定”按钮时更新颜色。当我的用户拖动“红色”滑块时,是否有一种机制可以监听 JColorChooser 中的连续颜色变化?
// How can I listen to every color adjustment?
// (i.e. not just when the user presses "Apply" or "OK"?)
ActionListener actionListener = new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
System.out.println("color changed");
}
};
Dialog colorDialog = JColorChooser.createDialog(ColorChannelWidget.this,
"Select color for channel 3",
false, // not modal
new JColorChooser(Color.pink),
actionListener, actionListener);
colorDialog.setVisible(true);
Run Code Online (Sandbox Code Playgroud)
编辑:
我要更改的颜色位于动态生成的 OpenGL 场景中。不是静态图像。
您将需要创建自己的JColorChooser和实例JDialog,以便可以将 附加ChangeListener到ColorSelectionModel的JColorChooser。
这是一个小演示代码,展示了如何执行此类操作:
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Window;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JColorChooser;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
public class TestColorChooser {
protected void initUI() {
JFrame frame = new JFrame(TestColorChooser.class.getSimpleName());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
final JPanel panel = new JPanel() {
@Override
public java.awt.Dimension getPreferredSize() {
return new Dimension(400, 400);
};
};
final JButton button = new JButton("Click me to change color");
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Window parentWindow = SwingUtilities.windowForComponent(button);
final JColorChooser chooser = new JColorChooser(panel.getBackground());
chooser.getSelectionModel().addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
panel.setBackground(chooser.getColor());
}
});
JDialog dialog = new JDialog(parentWindow);
dialog.add(chooser);
dialog.pack();
dialog.setLocation(panel.getLocationOnScreen().x + panel.getWidth(), panel.getLocationOnScreen().y);
dialog.setVisible(true);
}
});
frame.add(panel);
frame.add(button, BorderLayout.SOUTH);
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new TestColorChooser().initUI();
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
897 次 |
| 最近记录: |