不识别不同类别的颜色

时间:2014-10-25 21:03:18

标签: java colors jpanel

所以我想将我的Rectangle的颜色设置为JColorChooser选择的颜色,但不幸的是,我不认为它会识别它只是保持黑色,除非我为它指定一个真正的颜色,如{{1 }}

这是应从其他类中获取颜色的矩形:

Color.BLUE

这是具有颜色本身的类

TestProjectJPanel jpp = new TestProjectJPanel();

public void paintComponent(Graphics g){ 
        super.paintComponent(g);

        Rectangle r = new Rectangle(500,300,250,400);
        g.setColor(jpp.bodyColour);
        g.fillRect((int)r.getX(),(int)r.getY(),(int)r.getHeight(),(int)r.getWidth());

        g.setColor(Color.BLUE);
        g.drawString("banana", 50, 60);

    }

这是整个代码,其中包含import java.awt.*; import java.awt.event.*; import javax.swing.*; public class TestProjectJPanel extends JFrame { public JButton b; public JButton u; public JButton l; public JButton r; public String s; public Color color = (Color.WHITE); public JPanel panel; public Color bodyColour; public Color doorColour; public Color wheelColour; public TestProjectJPanel(){ JFrame f = new JFrame(); panel = new JPanel(); panel.setBackground(color); // bodyColour button b = new JButton("Body Colour"); b.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { bodyColour = JColorChooser.showDialog(null, "Pick the colour", bodyColour); if (bodyColour == null) bodyColour = Color.RED; } }); u = new JButton("Wheel Colour"); u.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent event){ wheelColour = JColorChooser.showDialog(null, "Pick the colour", wheelColour); if (wheelColour == null) wheelColour = (Color.BLACK); } }); l = new JButton("Door Colour"); l.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { doorColour = JColorChooser.showDialog(null, "Pick the colour", doorColour); if(doorColour==null) doorColour = (Color.RED); } }); r = new JButton("Change Name"); r.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { s = JOptionPane.showInputDialog("What name do you want to change it to?"); } }); } }

Rectangle

有人可以帮助我并为我解决为什么它不能识别颜色吗?

1 个答案:

答案 0 :(得分:0)

如果没有runnable example来证明你的问题,就不可能100%肯定,但从它的声音中,你又创建了两个TestProjectJPanel和/或绘图面板的实例,那么你认为自己并没有真正在屏幕上画画。

然而,听起来您还没有遵守基本的OO设计,确保对象是自我管理的,而是允许对象从另一个对象的属性中确定它的状态。

相反,您的绘制/矩形窗格应该是自包含的,也就是说,它应该管理它所需的所有属性(这也可以包括模型,但这超出了手头的问题)。

例如,ControlPane管理用户(选择颜色)与PaintPane上该颜色的设置之间的交互,仅处理绘制结果......

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;

public class ColorTest {

    public static void main(String[] args) {
        new ColorTest();
    }

    public ColorTest() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                    ex.printStackTrace();
                }

                PaintPane paintPane = new PaintPane();
                ControlPane controlPane = new ControlPane(paintPane);

                JFrame frame = new JFrame("Testing");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.add(paintPane);
                frame.add(controlPane, BorderLayout.SOUTH);
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

    public class ControlPane extends JPanel {

        public ControlPane(PaintPane paintPane) {
            JButton colorButton = new JButton("Color");
            add(colorButton);

            colorButton.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    Color color = JColorChooser.showDialog(ControlPane.this, "Background", paintPane.getFillColor());
                    if (color != null)
                        paintPane.setFillColor(color);
                }
            });
        }

    }

    public class PaintPane extends JPanel {

        private Color fillColor = Color.RED;

        public PaintPane() {}

        public Color getFillColor() {
            return fillColor;
        }

        public void setFillColor(Color fillColor) {
            this.fillColor = fillColor;
            repaint();
        }

        @Override
        public Dimension getPreferredSize() {
            return new Dimension(200, 200);
        }

        @Override
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            Graphics2D g2d = (Graphics2D) g.create();
            g2d.setColor(fillColor);
            g2d.fillRect(50, 50, 100, 100);
            g2d.dispose();
        }

    }

}