1

はい、私は awt と swing コンポーネントを混在させていますが、Java をよく知らないので簡単な修正があるかもしれません。

私のキャンバスオブジェクトは、ペイントと更新をオーバーライドします:

package demo;
import java.awt.*;

public class rectangle extends Canvas {
    public rectangle() {
        this.setSize(500,300);
        this.setVisible(true);
    }
    public void paint(Graphics g) {
        Graphics2D g2 = (Graphics2D) g;
        g2.setColor(Color.YELLOW);

        g2.fill3DRect(0, 0, 500, 300, true);
    }
    public void update(Graphics g) { paint(g); }
}

JComboBox がこの上に開くと、その上に描画されません。例として、私が話していることを示す JFrame を次に示します。

package demo;
import javax.swing.*;
import java.util.*;
import java.awt.*;

public class ASframe extends JFrame {
    public ASframe() {
        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        ArrayList listNames = new ArrayList();
        listNames.add("One");
        listNames.add("Two");
        listNames.add("Three");
        listNames.add("Four");

        rectangle r = new rectangle();
        JComboBox listBox = new JComboBox(listNames.toArray());
        listBox.setVisible(true);

        JPanel listPane = new JPanel();
        listPane.setLayout(new BoxLayout(listPane, BoxLayout.PAGE_AXIS));
        listPane.add(listBox);
        listPane.add(r);

        this.setResizable(false);
        this.add(listPane);
        this.pack();
    }
    public static void main(String arg[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new ASframe().setVisible(true);
            }
        });
    }
}

本当に興味深いのは、長方形が JComboBox より小さい場合、まったく問題がないことです。したがって、長方形を 300x20 に変更すると、期待どおりに機能します。

前もって感謝します。

4

1 に答える 1

2

Swing に重量コンポーネントを使用するように指示してみて、それが機能するかどうかを確認してください。

JComboBox listBox = new JComboBox(listNames.toArray());
listBox.setVisible(true);

// additional line below    
listBox.setLightWeightPopupEnabled(false); // use heavyweight component
于 2013-08-08T00:49:46.467 に答える