MausCursor auf WaitCursor, kompletter Frame

Status
Nicht offen für weitere Antworten.

kale1990

Mitglied
Hallo,

wenn ich in meinem Programm etas zeitintensives mache und den Cursor auf den WAIT_CURSOR setze, ist der cursor nur dann wait_cursor wenn man mit der maus über dem hauptframe is, also über textfeldern z.b. is der textcursor da.
ist im prinzip logisch, man kann ja die cursor für jedes objekt einzeln verwalten.
aber gibt es eine möglichkeit das wenn ich meinem frame den waitcursor zuweiß, dass alle componenten darunter auch den waitcursor haben???
 

Ebenius

Top Contributor
Gibt da nen einfachen Trick: GlassPane auf's Frame. Beispiel:
Code:
/* glass pane, used while busy */
final JPanel glassPane = new JPanel() {

  @Override
  protected void paintComponent(Graphics g) {
    super.paintComponent(g);
    g.setColor(new Color(64, 64, 128, 64));
    g.fillRect(0, 0, getWidth(), getHeight());
  }
};
glassPane.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
glassPane.setOpaque(false);

/* A button for the action */
final JButton button = new JButton("Simulate Action: 2 seconds");
button.addActionListener(new ActionListener() {

  @Override
  public void actionPerformed(ActionEvent e) {
    final Component c = (Component) e.getSource();
    final JRootPane rootPane = SwingUtilities.getRootPane(c);
    final Component glassPane = rootPane.getGlassPane();
    if (glassPane != null) {
      glassPane.setVisible(true);
      final javax.swing.Timer timer =
            new javax.swing.Timer(2000, new ActionListener() {

              @Override
              public void actionPerformed(ActionEvent e) {
                glassPane.setVisible(false);
              }
            });
      timer.setRepeats(false);
      timer.start();
    }
  }
});

/* a text field for cursor check */
final JTextField textField = new JTextField("ABC");

/* content pane */
final JPanel largePanel = new JPanel(new GridLayout(2, 1));
largePanel.add(textField);
largePanel.add(button);

final JFrame f = new JFrame("Cursor on GlassPane");
f.setContentPane(new JXScrollPane(largePanel));
f.setGlassPane(glassPane);
f.setSize(400, 400);
f.setLocationRelativeTo(null);
f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
f.setVisible(true);

Ebenius
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen

Ähnliche Java Themen

Neue Themen


Oben