【问题标题】:JComboBox covers other things?JComboBox 涵盖其他内容?
【发布时间】:2023-03-07 11:41:01
【问题描述】:

点击JComboBox后,JComboBox用灰色长方形的东西遮住了画的一些部分,是不是代码有问题,如何解决?谢谢!

Here's the image.

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;

import javax.swing.Box;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class MouseButtonTester extends JFrame implements     MouseMotionListener{
    int x,y,r;
    JComboBox colorChooser;
    Color color;
    JTextField red = new JTextField();
    JTextField green = new JTextField();
    JTextField blue = new JTextField();
    JPanel topPanel = new JPanel();
    JComboBox pen;
    int fillKind;

    Object[] chooseRGB = {
        "Red: ", red, 
        "Green: ", green,
        "Blue: ", blue
    };


    public MouseButtonTester(){
    super();
    this.addMouseMotionListener(this);
    setResizable(true);

    setLayout(new BorderLayout());
    add(topPanel,BorderLayout.NORTH);
    topPanel.setLayout(new GridLayout(1,2));
    colorChooser = new JComboBox();
    pen = new JComboBox();
    topPanel.add(pen);
    topPanel.add(colorChooser);
    colorChooser.setBackground(Color.WHITE);
    pen.setBackground(Color.WHITE);

    pen.addItem("Pen");
    pen.addItem("Marker");
    pen.addItem("Highlighter");
    pen.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent e){
            if(pen.getSelectedItem().toString().equals("Pen")){
                fillKind = 0;
                r = 8;
            }else if(pen.getSelectedItem().toString().equals("Marker")){
                fillKind = 0;
                r = 15;
            }else if(pen.getSelectedItem().toString().equals("Highlighter")){
                fillKind = 1;

            }
        }
    });

    colorChooser.setFont(new Font("Serif",Font.PLAIN,14));
    colorChooser.addItem("Red");
    colorChooser.addItem("Orange");
    colorChooser.addItem("Yellow");
    colorChooser.addItem("Green");
    colorChooser.addItem("Blue");
    colorChooser.addItem("Violet");
    colorChooser.addItem("Purple");
    colorChooser.addItem("Choose RGB");
    colorChooser.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent e){
            if("Red" == colorChooser.getSelectedItem().toString()){
                color = Color.RED;
            }else if("Orange" == colorChooser.getSelectedItem().toString()){
                color = Color.ORANGE;
            }else if("Yellow" == colorChooser.getSelectedItem().toString()){
                color = Color.YELLOW;
            }
            else if("Green" == colorChooser.getSelectedItem().toString()){
                color = Color.GREEN;
            }
            else if("Blue" == colorChooser.getSelectedItem().toString()){
                color = Color.BLUE;
            }
            else if("Violet" == colorChooser.getSelectedItem().toString()){
                color = new Color(180,0,200);
            }
            else if("Purple" == colorChooser.getSelectedItem().toString()){
                color = new Color(150,0,200);
            }
            else if("Purple" == colorChooser.getSelectedItem().toString()){

            }
            else if("Choose RGB" ==     colorChooser.getSelectedItem().toString()){
                int option = JOptionPane.showConfirmDialog(null, chooseRGB,        "Choose RGB", JOptionPane.OK_CANCEL_OPTION);
                if(option == JOptionPane.OK_OPTION){
                        int redValue = Integer.parseInt(red.getText());
                        int greenValue = Integer.parseInt(green.getText());
                        int blueValue = Integer.parseInt(blue.getText());
                        color = new Color(redValue,greenValue,blueValue);
                    }
                }
            }
        });
    } 

    Graphics graphics;

    public void paint(Graphics g){
        graphics = g.create();
    }

    public void mouseDragged(MouseEvent e) {
        x = e.getX();
        y = e.getY();

        graphics.setColor(color);
        if(fillKind == 0){
            graphics.fillOval(x, y, r, r);
        }else if(fillKind == 1){
            graphics.fillRect(x, y, 10, 25);
        }
        repaint();
    }

    public void mouseMoved(MouseEvent arg0) {
        //No actions
    }   
}

【问题讨论】:

  • 猜测:如果您在将组合框添加到其所属面板之前完全配置组合框,是否会有所不同?
  • 这不完整;没有main(),当我添加main() 并运行它时,它会产生一个折叠的窗口,与您在图像中给出的窗口不同。所以无论生成那个图像,它都不完全是这个代码。
  • 再看一遍,我没有看到任何代码可以处理组合框下拉菜单遮挡面板的一部分并重新绘制的情况。您将需要执行此操作的代码。有一个事件(我忘了是哪一个)通知您的面板有东西遮挡了它,矩形坐标已被遮挡,并且由您的面板重新绘制该部分。
  • 那么我到底该怎么做呢?
  • 另外忘了说明,我在另一个班级有main()。

标签: java jcombobox paintcomponent


【解决方案1】:

如果你仔细看你的代码,JPanel 上绘制的 JComboBox 表示绘制在绘图区域上。解决此问题的简单方法是创建两个面板;第一个用于工具(组合框)并添加您的其他工具,并将另一个面板添加到绘图区域。

另一种方法是在选择项目后重新绘制面板。

【讨论】:

    猜你喜欢
    • 2019-02-26
    • 2019-04-06
    • 1970-01-01
    • 2012-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多