首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更改JColorChooser预览面板

更改JColorChooser预览面板
EN

Stack Overflow用户
提问于 2020-05-12 13:02:16
回答 1查看 518关注 0票数 0

目的是将预览部分改为:

在这种情况下,预览区域有边框、背景中的实心框和"Hello“字符串,该字符串将更改为预览选择的颜色。

从java2开始使用这个示例,它简单地显示了JColorChooser。

代码语言:javascript
复制
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JColorChooser;
import javax.swing.JFrame;

public class ColorChooserSample {
  public static void main(String args[]) {
    JFrame f = new JFrame("JColorChooser Sample");
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    Container content = f.getContentPane();
    final JButton button = new JButton("Pick to Change Background");

    ActionListener actionListener = new ActionListener() {
      public void actionPerformed(ActionEvent actionEvent) {
        Color initialBackground = button.getBackground();
        JColorChooser jColorChooser = new JColorChooser();
        jColorChooser.setPreviewPanel(null);
        Color background = jColorChooser.showDialog(null,
            "JColorChooser Sample", initialBackground);
        if (background != null) {
          button.setBackground(background);
        }
      }
    };
    button.addActionListener(actionListener);
    content.add(button, BorderLayout.CENTER);
    f.setSize(300, 200);
    f.setVisible(true);
  }
}

为了查看是否可以影响预览区域,我修改了原始代码如下:

代码语言:javascript
复制
    Color background = JColorChooser.showDialog(null,
        "JColorChooser Sample", initialBackground);

对此:

代码语言:javascript
复制
        JColorChooser jColorChooser = new JColorChooser();
        jColorChooser.setPreviewPanel(null);
        Color background = jColorChooser.showDialog(null,
            "JColorChooser Sample", initialBackground);

基本上,这是试图查看预览部分是否为空(空白),但它没有影响,这让我怀疑setPreviewPanel()是否是正确的调用。

此外,在代码更改后出现此警告:应该以静态方式访问JColorChooser类型的静态方法JColorChooser(Component,String,Color)

问题:

是否有更改颜色选择器预览部分的示例?

为什么上面的空不起作用。

如果警告指示应该以静态方式访问JColorChooser,那么实际如何进行setPreviewPanel()调用?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-12 16:46:46

修改JColorChooser预览面板的例子不多。我找到了四个例子。与JColorChooser的Javadoc一起,我创建了一个修改过的JColorChooser预览面板的工作示例。

我修改了原始的JFrame / JPanel以更改JPanel的背景色,这样可以更容易地看到结果。

这是修改过的JColorChooser

在这里,我将预览JPanel的背景色更改为黄色。

然后将主JPanel的背景色更改为黄色。

这是密码。我把代码分成了几个小块大小的方法和类,这样我就可以一次专注于GUI数据的一个部分。

代码语言:javascript
复制
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.HeadlessException;
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.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

public class ColorChooserSample implements Runnable{

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

    private JPanel panel;

    @Override
    public void run() {
        JFrame frame = new JFrame(
                "JColorChooser Sample");
        frame.setDefaultCloseOperation(
                JFrame.EXIT_ON_CLOSE);

        panel = new JPanel();
        panel.setPreferredSize(new Dimension(300, 200));
        JButton button = new JButton(
                "Pick to Change JPanel Background");
        button.addActionListener(new ColorListener());
        panel.add(button);

        frame.add(panel, BorderLayout.CENTER);
        frame.pack();
        frame.setLocationByPlatform(true);
        frame.setVisible(true);
    }

    public void setJPanelBackground(Color color) {
        panel.setBackground(color);
        panel.repaint();
    }

    public class ColorListener implements 
            ActionListener, ChangeListener {

        private JColorChooser chooser;

        private JPanel previewPanel;

        @Override
        public void actionPerformed(
                ActionEvent actionEvent) {
            Color backgroundColor = showDialog(panel, 
                    "Set JPanel Background", 
                    panel.getBackground());
            setJPanelBackground(backgroundColor);
        }

        private Color showDialog(Component component, 
                String title, Color initialColor) 
                        throws HeadlessException {
            chooser = new JColorChooser(initialColor);
            chooser.getSelectionModel()
                .addChangeListener(this);

            // configuring color chooser panel
            previewPanel = new JPanel();
            previewPanel.setBackground(initialColor);
            JLabel label = new JLabel("Hello World!");
            previewPanel.add(label);
            chooser.setPreviewPanel(previewPanel);

            // creating dialog
            ColorTracker ok = new ColorTracker(chooser);
            JDialog dialog = JColorChooser.createDialog(
                    component, title, true, chooser, 
                    ok, null);
            dialog.setVisible(true);
            return ok.getColor();
        }

        @Override
        public void stateChanged(ChangeEvent event) {
            Color newColor = chooser.getColor();
            previewPanel.setBackground(newColor);
        }

    }

    private class ColorTracker implements ActionListener {

        private Color color;

        private JColorChooser chooser;

        public ColorTracker(JColorChooser chooser) {
            this.chooser = chooser;
        }

        @Override
        public void actionPerformed(ActionEvent event) {
            color = chooser.getColor();
        }

        public Color getColor() {
            return color;
        }

    }

}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61752433

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档