2015-02-28 4 views
-1

UPDATE:Как добавить положение мыши JButton?

Я установил его с помощью мыши и мыши. Я добавил адаптер мыши и прослушиватель мыши, чтобы исправить это. Я сделал так, что, когда мышь введена, она красная, и когда она уходит, она черная. Будет ли это работать, если я сделаю кнопку невидимой и сделаю свою собственную кнопку? Смогу ли я сохранить текст игры?

Мой код:

package Main; 

import java.awt.Color; 
import java.awt.Font; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.SwingUtilities; 


public class Game extends JPanel { 
public Game() { 
    JFrame frame = new JFrame("Tennis Game"); 

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setLayout(null); 

    final JButton b = new JButton("Play"); 

    b.setBackground(new Color(220,220,220)); 
    b.setFocusPainted(false); 
    b.setFont(new Font(Font.SANS_SERIF, Font.BOLD, 20)); 
    b.setBounds(110, 100, 80, 40); 
    b.setForeground(Color.BLACK); 

    b.addMouseListener(new java.awt.event.MouseAdapter(){ 

     public void mouseEntered(java.awt.event.MouseEvent evt) { 
      b.setForeground(Color.RED); 
     } 

     public void mouseExited(java.awt.event.MouseEvent evt) { 
      b.setForeground(Color.BLACK); 
     } 

    }); 

    frame.add(b); 
    frame.setSize(300,400); 
    frame.setVisible(true); 

} 



public static void main(String[] args) { 
    SwingUtilities.invokeLater(new Runnable() { 
     @Override 
     public void run() { 
      new Game(); 
     } 
    }); 
} 

} 

Спасибо !!

+2

Это легко сделать, если вы используете изображения для «текст» вместо фактического текста. 'JButton' поддерживает все различные типы значков, стандартные, перевернутые, сфокусированные, нажатые. Установите соответствующие значки для каждого, а кнопка сделает все остальное. –

+0

Можете ли вы привести пример, я немного смущен. –

+0

О, и 'new Font (« Arial », Font.BOLD, 20)' должен быть 'new Font (Font.SANS_SERIF, Font.BOLD, 20)' для размещения тех настольных компьютеров, которые имеют превосходный не украшенный шрифт (как OS X с Helvetica). –

ответ

3
  1. Вам нужно будет использовать mouseEnter и mouseExit события из MouseListener;
  2. Вы не должны и у вас не будет проблем, если ваша попытка; API Swing разработан вокруг менеджеров компоновки приложений, попытки обойтись без них, приведет к тому, что вы изобретаете колесо с помощью хаков, чтобы справиться со всеми проблемами, с которыми вы столкнулись.
  3. Отключить текущую окраску границы (setBorderPainted) а затем применить свою собственную границу, что-то вроде LineBorder

Начните с взглянуть на How to use Mouse Listeners и How to us Borders для получения более подробной информации ...

Использование MouseEnter Я попытался это, но когда я делаю это Безразлично» т работы.

Во-первых, читать учебник How to use Mouse Listeners

import java.awt.EventQueue; 
import java.awt.GridBagLayout; 
import java.awt.event.MouseAdapter; 
import java.awt.event.MouseEvent; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.UIManager; 
import javax.swing.UnsupportedLookAndFeelException; 

public class Test { 

    public static void main(String[] args) { 
     new Test(); 
    } 

    public Test() { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
       } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { 
        ex.printStackTrace(); 
       } 

       JFrame frame = new JFrame("Testing"); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.add(new TestPane()); 
       frame.pack(); 
       frame.setLocationRelativeTo(null); 
       frame.setVisible(true); 
      } 
     }); 
    } 

    public class TestPane extends JPanel { 

     public TestPane() { 
      setLayout(new GridBagLayout()); 
      JButton btn = new JButton("play"); 
      add(btn); 

      btn.addMouseListener(new MouseAdapter() { 

       @Override 
       public void mouseEntered(MouseEvent e) { 
        btn.setText(btn.getText().toUpperCase()); 
       } 

       @Override 
       public void mouseExited(MouseEvent e) { 
        btn.setText(btn.getText().toLowerCase()); 
       } 

      }); 
     } 

    } 

} 

Но я согласен с AndrewThompson, вы бы лучше использовать «нормальный» значок и «пролонгировать» значок ...

enter image description here

import java.awt.EventQueue; 
import java.awt.GridBagLayout; 
import java.io.IOException; 
import javax.imageio.ImageIO; 
import javax.swing.ImageIcon; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.UIManager; 
import javax.swing.UnsupportedLookAndFeelException; 

public class Test { 

    public static void main(String[] args) { 
     new Test(); 
    } 

    public Test() { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
       } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { 
        ex.printStackTrace(); 
       } 

       JFrame frame = new JFrame("Testing"); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.add(new TestPane()); 
       frame.pack(); 
       frame.setLocationRelativeTo(null); 
       frame.setVisible(true); 
      } 
     }); 
    } 

    public class TestPane extends JPanel { 

     public TestPane() { 
      setLayout(new GridBagLayout()); 
      JButton btn = new JButton(); 
      add(btn); 

      try { 
       btn.setIcon(new ImageIcon(
           ImageIO.read(getClass().getResource("/Play-Plain.png")) 
       )); 
       btn.setRolloverIcon(new ImageIcon(
           ImageIO.read(getClass().getResource("/Play-RollOver.png")) 
       )); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 

    } 

} 
+0

Использование mouseEnter Я пробовал, но когда я это делаю, это не работает. Это дает мне b.mouseEnter (evt, x, y). Что такое evt и как сделать событие, где оно меняет цвет? –

+0

Вы добавляете MouseListener к самой кнопке? – MadProgrammer

+0

Да, я импортировал mouseListener и использовал указатель мыши для кнопки –

Смежные вопросы