はい、私は 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 に変更すると、期待どおりに機能します。
前もって感謝します。