お客様はUIに問題があると言います。ポップアップメニューが開いて消えた後、灰色の領域が消えないことがあります。ポップアップ(JPopupMenu
)に表示されているSwingとグレーの四角形を使用します。Swing JPopupMenu:灰色の領域が重複する
私はその問題を再現することはできません。私はそれについてどこで読むことができますか?任意の直接スイングのJComponentとその逆とAWTのPopupMenuを混合
お客様はUIに問題があると言います。ポップアップメニューが開いて消えた後、灰色の領域が消えないことがあります。ポップアップ(JPopupMenu
)に表示されているSwingとグレーの四角形を使用します。Swing JPopupMenu:灰色の領域が重複する
私はその問題を再現することはできません。私はそれについてどこで読むことができますか?任意の直接スイングのJComponentとその逆とAWTのPopupMenuを混合
ない可能が、理由は何であれ、その逆も同様スイングとAWT PopupMenu
を混合するための方法をミス(aaaach理由AWTの残りの部分ではない同じ実装であり、Jスイング/コンポーネントも)
は、ポップアップとJPopupの両方がAPIのMOUSE_RIGHT_CLICKからrellatedメソッドを正しく実装しているので、AWT PopupMenuのみが最初のモニタにのみ表示されます2番目または3番目のモニターにコンテナを置くこともできます。AFAIKはSwing JPopupMenuのみに固定されます
、J /ポップアップがJava6_019ためのすべてのケースで動作又はスイングケース22
import java.awt.EventQueue;
import java.awt.Frame;
import java.awt.Label;
import java.awt.MenuItem;
import java.awt.PopupMenu;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.concurrent.*;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.*;
public class IsThereEDT {
private ScheduledExecutorService scheduler;
private AccurateScheduledRunnable periodic;
private ScheduledFuture<?> periodicMonitor;
private int taskPeriod = 30;
private SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
private Date dateRun;
private JFrame frame1 = new JFrame("Frame 1");
private Frame frame2 = new Frame("Frame 2");
private PopupMenu popup1 = new PopupMenu();
public IsThereEDT() {
scheduler = Executors.newSingleThreadScheduledExecutor();
periodic = new AccurateScheduledRunnable() {
private final int ALLOWED_TARDINESS = 200;
private int countRun = 0;
private int countCalled = 0;
private int maxCalled = 10;
@Override
public void run() {
countCalled++;
if (countCalled < maxCalled) {
if (countCalled % 3 == 0) {
/*if (EventQueue.isDispatchThread()) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
//some stuff
}
});
} else {
try {
SwingUtilities.invokeAndWait(new Runnable() {
@Override
public void run() {
//some stuff
}
});
} catch (InterruptedException ex) {
Logger.getLogger(IsThereEDT.class.getName()).log(Level.SEVERE, null, ex);
} catch (InvocationTargetException ex) {
Logger.getLogger(IsThereEDT.class.getName()).log(Level.SEVERE, null, ex);
}
}*/
/*SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
System.out.println("Push a new event to EDT");
frame1.repaint();
isThereReallyEDT();
}
});*/
} else {
if (this.getExecutionTime() < ALLOWED_TARDINESS) {
countRun++;
isThereReallyEDT(); // non on EDT
}
}
} else {
System.out.println("Terminating this madness");
System.exit(0);
}
}
};
periodicMonitor = scheduler.scheduleAtFixedRate(periodic, 0, taskPeriod, TimeUnit.SECONDS);
periodic.setThreadMonitor(periodicMonitor);
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
isThereReallyEDT();
Label label1 = new Label("Hello in frame 1");
for (int i = 1; i <= 5; i++) {
MenuItem menuItem = new MenuItem("item" + i);
popup1.add(menuItem);
}
label1.add(popup1);
frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame1.add(label1);
frame1.pack();
frame1.setLocation(100, 100);
frame1.setVisible(true);
}
});
try {
Thread.sleep(1500);
} catch (InterruptedException ex) {
Logger.getLogger(IsThereEDT.class.getName()).log(Level.SEVERE, null, ex);
}
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
//frame2.setDefaultCloseOperation(Frame.EXIT_ON_CLOSE);
JLabel label2 = new JLabel("Hello in frame 2");
frame2.add(label2);
frame2.pack();
frame2.setLocation(200, 200);
frame2.setVisible(true);
isThereReallyEDT();
}
});
}
private void isThereReallyEDT() {
dateRun = new java.util.Date();
System.out.println(" Time at : " + sdf.format(dateRun));
if (EventQueue.isDispatchThread()) {
System.out.println("EventQueue.isDispatchThread");
} else {
System.out.println("There isn't Live EventQueue.isDispatchThread, why any reason for that ");
}
if (SwingUtilities.isEventDispatchThread()) {
System.out.println("SwingUtilities.isEventDispatchThread");
} else {
System.out.println("There isn't Live SwingUtilities.isEventDispatchThread, why any reason for that ");
}
System.out.println();
}
public static void main(String[] args) {
IsThereEDT isdt = new IsThereEDT();
}
}
abstract class AccurateScheduledRunnable implements Runnable {
private ScheduledFuture<?> thisThreadsMonitor;
public void setThreadMonitor(ScheduledFuture<?> monitor) {
this.thisThreadsMonitor = monitor;
}
protected long getExecutionTime() {
long delay = -1 * thisThreadsMonitor.getDelay(TimeUnit.MILLISECONDS);
return delay;
}
}
a)はあなたのコードがのJMenuItem(S)
を追加しませんがありますb)にあなたのコードがJComponentの(S)
C)多分そこに追加されたカスタムコンポーネントを追加していない、そして誰も
は全くGUIで任意のAWTコンポーネントはあります知っていますか?すべてのGUIアップデートはEDTで行われますか? –
@AndrewThompsonのコメントをさらに明確にするために、「メニューチュートリアル」(http://docs.oracle.com/javase/tutorial/uiswing/components/menu.html)で軽量/重量とメニューの混合が取り上げられ、[this ](http://www.oracle.com/technetwork/articles/java/mixing-components-433992.html)も興味深い記事かもしれません – Robin