Модераторы: LSD, AntonSaburov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Что за компонент? 
:(
    Опции темы
Reptor
Дата 21.4.2008, 10:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1213
Регистрация: 29.12.2004

Репутация: 1
Всего: 0



Вопрос заключается в том что я не могу найти или понять что за компонент используется скриншот которого я привёл в атаче.

Я пробывал извращаться что б его сделать но так и ничего не получилось. 

Этот компонент есть в каждом приложении он состоит из 2-ух частей картинки а рядом стрелочка при нажатии на которую выпадает или то меню или как это там реализовано.  smile  В общем в атаче я привёл пример.

Присоединённый файл ( Кол-во скачиваний: 47 )
Присоединённый файл  button.rar 3,94 Kb
PM MAIL ICQ   Вверх
powerOn
Дата 21.4.2008, 10:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


Профиль
Группа: Участник
Сообщений: 4367
Регистрация: 7.10.2005

Репутация: 31
Всего: 159



Мне кажется это просто 2 кнопки, по нажатию той, что со стрелкой, вылазит контекстное меню.


--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
Reptor
Дата 21.4.2008, 11:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1213
Регистрация: 29.12.2004

Репутация: 1
Всего: 0



Цитата

Мне кажется это просто 2 кнопки,


а возможно сделать что при наведении на одну так же выделяется вторая? и что это за контекстное меню на кнопке?
PM MAIL ICQ   Вверх
powerOn
Дата 21.4.2008, 15:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


Профиль
Группа: Участник
Сообщений: 4367
Регистрация: 7.10.2005

Репутация: 31
Всего: 159



Цитата(Reptor @  21.4.2008,  12:09 Найти цитируемый пост)
а возможно сделать что при наведении на одну так же выделяется вторая?

Теоретически, техническая возможность есть. 

Цитата(Reptor @  21.4.2008,  12:09 Найти цитируемый пост)
и что это за контекстное меню на кнопке? 

Наверно это обыкновенное контекстное меню. При нажатии на кнопку оно отображается.



--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
Reptor
Дата 22.4.2008, 15:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1213
Регистрация: 29.12.2004

Репутация: 1
Всего: 0



а может кто то подсказать как можно это реализовать у меня просто не выходит. Ну как бы 2 кнопки я зделал с картинками и оно смотрится нормально а вот что б при наведении мышки  кнопки выделялись и организовать меню я не знаю как. Видимо просто я незнаю те свойства которые мне помогут
PM MAIL ICQ   Вверх
Asal
Дата 22.4.2008, 15:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 288
Регистрация: 26.12.2006
Где: Минск

Репутация: 3
Всего: 7



Как сделать меню смотри здесь
а как сделать фокус на две кнопки не наю.


--------------------
PM MAIL ICQ   Вверх
dorogoyIV
Дата 22.4.2008, 19:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1503
Регистрация: 26.3.2007

Репутация: 36
Всего: 46



Цитата(Reptor @  22.4.2008,  15:21 Найти цитируемый пост)
а может кто то подсказать как можно это реализовать


а так не подойдет?
Код

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;

class MyButtons extends JButton
{
 MyButtons()
 {
  setLayout(new BorderLayout());
  setBorder(null);

  Border border = new BevelBorder(BevelBorder.RAISED);

  JLabel center = new JLabel(" center ");
  final JLabel east = new JLabel(" \u25BC ");

  center.setBorder(border);
  east.setBorder(border);

  add(center, "Center");
  add(east, "East");

  final JPopupMenu jpm = new JPopupMenu();

  JMenu menu = new JMenu("Menu");
  JMenuItem item = new JMenuItem("Item");
  menu.add(item);

  jpm.add(menu);
  jpm.add(new JMenuItem("New Item"));

  east.addMouseListener(new MouseAdapter()
  {
   public void mouseClicked(MouseEvent e)
   {
    jpm.show(e.getComponent(), east.getWidth(), 0);
   }
  });
 }

 public static void main(String [] args)
 {
  JFrame f = new JFrame();
  f.setLayout(new FlowLayout());
  f.setSize(200, 100);
  f.add(new MyButtons());
  f.setVisible(true);
  f.setDefaultCloseOperation(3);
 }
}

PM MAIL   Вверх
Reptor
Дата 22.4.2008, 23:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1213
Регистрация: 29.12.2004

Репутация: 1
Всего: 0



dorogoyIV, да хорошо, я ещё добавил

 
Код

public void mouseEntered(MouseEvent e){
       center.setBorder(border);
       east.setBorder(border);
   }
   
   public void mouseExited(MouseEvent e){
       center.setBorder(null);
       east.setBorder(null);
   }


тогда есть эффект выделения. 

Это сообщение отредактировал(а) Reptor - 22.4.2008, 23:05
PM MAIL ICQ   Вверх
SoulKeeper
Дата 24.4.2008, 11:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 375
Регистрация: 14.1.2007
Где: Ukraine, Lviv.

Репутация: 2
Всего: 15



Лутше поздно чем никогда smile

Эффект наведения мышки: button.getModel().setRollOver(true);
Эффект нажатия: button.getModel().setArmed(true);


Бордеров не надо smile)

Это сообщение отредактировал(а) SoulKeeper - 24.4.2008, 11:06
PM MAIL   Вверх
Reptor
Дата 24.4.2008, 13:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1213
Регистрация: 29.12.2004

Репутация: 1
Всего: 0



SoulKeeper, что то у меня не выходит.  smile

Добавлено через 2 минуты и 28 секунд
Код

package Main;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;

class MyButtons extends JButton{
    MyButtons()    {
        setLayout(new BoxLayout(this, BoxLayout.X_AXIS));
        setBorder(null);    

        setPreferredSize(new Dimension(30,25));
        
        final Border border = new BevelBorder(BevelBorder.RAISED);

        final JButton center = new JButton();
        center.setIcon(new ImageIcon("resource/images/save1.gif"));
        center.setPreferredSize(new Dimension(20,25));
        //center.setBorderPainted(false);
        
        final JButton east = new JButton();
        east.setIcon(new ImageIcon("resource/images/arow.gif"));        
        east.setPreferredSize(new Dimension(15,25));
        setBorderPainted(false);

    
        
        center.getModel().setRollover(true);
        center.getModel().setArmed(true);
    
        
        add(center);
        add(east);

  final JPopupMenu jpm = new JPopupMenu();

  JMenu menu = new JMenu("Menu");
  JMenuItem item = new JMenuItem("Item");
  menu.add(item);

  jpm.add(menu);
  jpm.add(new JMenuItem("New Item"));
  
  
  

  east.addMouseListener(new MouseAdapter()
  {
   public void mouseClicked(MouseEvent e)   {
    jpm.show(e.getComponent(), east.getWidth(), 0);
    
    
   }
   
   public void mouseEntered(MouseEvent e){
     //  center.getModel().setRollover(true);
     //  east.getModel().setRollover(true);
      //  center.setBorderPainted(true);
      //  east.setBorderPainted(true);
   }
   
   public void mouseExited(MouseEvent e){
     
      // center.setBorderPainted(false);
      // east.setBorderPainted(false);
   }
   
  });
  
  
  center.addMouseListener(new MouseAdapter()
  {
   
   public void mouseEntered(MouseEvent e){
      // center.setBorder(border);
      // east.setBorder(border);
       center.getModel().setRollover(true);
       center.getModel().setArmed(true);
   }
   
   public void mouseExited(MouseEvent e){
      // center.setBorder(null);
      // east.setBorder(null);
       center.getModel().setRollover(false);
       center.getModel().setArmed(false);
   }
   
   
   
  });
  
  
 }
}


PM MAIL ICQ   Вверх
SoulKeeper
Дата 24.4.2008, 15:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 375
Регистрация: 14.1.2007
Где: Ukraine, Lviv.

Репутация: 2
Всего: 15



Ну грубо говоря:

Код

package tests;

import java.awt.FlowLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class ButtonTest {

  public static void main(String[] args) {

    JFrame f = new JFrame();
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    JPanel panel = new JPanel();

    JButton b1 = new JButton();
    b1.setFocusable(false);
    b1.setText("Button 1");

    JButton b2 = new JButton();
    b2.setFocusable(false);
    b2.setText("Button 2");

    b1.addMouseListener(new ButtonStateSetter(b2));
    b2.addMouseListener(new ButtonStateSetter(b1));

    panel.add(b1);
    panel.add(b2);

    panel.setLayout(new FlowLayout());

    f.add(panel);

    f.pack();
    f.setLocationRelativeTo(null);
    f.setVisible(true);
  }

  private static class ButtonStateSetter extends MouseAdapter {

    private JButton anotherButton;

    public ButtonStateSetter(JButton anotherButton) {
      super();
      this.anotherButton = anotherButton;
    }

    public JButton getAnotherButton() {
      return anotherButton;
    }

    public void setAnotherButton(JButton anotherButton) {
      this.anotherButton = anotherButton;
    }

    @Override
    public void mouseEntered(MouseEvent e) {
      anotherButton.getModel().setRollover(true);
    }

    @Override
    public void mouseExited(MouseEvent e) {
      anotherButton.getModel().setRollover(false);
    }

    @Override
    public void mousePressed(MouseEvent e) {
      anotherButton.getModel().setArmed(true);
      anotherButton.getModel().setPressed(true);
    }

    @Override
    public void mouseReleased(MouseEvent e) {
      anotherButton.getModel().setArmed(false);
      anotherButton.getModel().setPressed(false);
    }
  }
}



Хотя там надо еше отслеживать некоторые специфические события, к примеру юзер зажал кнопку мышки и зажатой вывел за рамки кнопки...
PM MAIL   Вверх
Reptor
  Дата 24.4.2008, 16:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1213
Регистрация: 29.12.2004

Репутация: 1
Всего: 0



У меня проблема в том что я добавляю  и из за этого не работает.
Код

try{
     UIManager.setLookAndFeel(
                     UIManager.getSystemLookAndFeelClassName());
         }
         catch(Exception e){}    

PM MAIL ICQ   Вверх
Asal
Дата 25.4.2008, 10:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 288
Регистрация: 26.12.2006
Где: Минск

Репутация: 3
Всего: 7



А не проще ипользовать кнопку с иконкой ?
По-моему так сделано в IntelliJ IDEA

Это сообщение отредактировал(а) Asal - 25.4.2008, 10:14

Присоединённый файл ( Кол-во скачиваний: 24 )
Присоединённый файл  Button.jpg 2,40 Kb


--------------------
PM MAIL ICQ   Вверх
Reptor
Дата 25.4.2008, 12:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1213
Регистрация: 29.12.2004

Репутация: 1
Всего: 0



Asal, да можно только ведь на кнопке у меня 2 картинки. Как на одну кнопку добавить 2 картинки ?  И ещё нет вотетой вертикальной полоски между 2-умя иконками как 2 разные кнопки но в сумме это одно целое. 
PM MAIL ICQ   Вверх
Asal
Дата 25.4.2008, 14:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 288
Регистрация: 26.12.2006
Где: Минск

Репутация: 3
Всего: 7



Вот не очень красиво, но принцип понятен
Код

import javax.swing.*;
import javax.swing.plaf.basic.BasicButtonUI;
import javax.swing.plaf.metal.MetalIconFactory;
import java.awt.*;

public class MyPanel {
  static class MyButtonUI extends BasicButtonUI {
    @Override
    public void paint(Graphics g, JComponent c) {
      super.paint(g, c);
      g.drawLine(199, 0, 199, 50);
      ((JButton)c).getIcon().paintIcon(c, g, 200, 10);
    }
  }

  private static void ShowPanels() {
    JFrame myframe = new JFrame("Frame");
    myframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    JPanel panel = new JPanel(new GridLayout(5, 1));
    //add frame elements
    myframe.getContentPane().add(panel);
    JButton jButton = new JButton("test");
    jButton.setIcon(new MetalIconFactory.FileIcon16());
    jButton.setUI(new MyButtonUI());
    panel.add(jButton);
    myframe.pack();
    myframe.setSize(300, 200);
    myframe.setVisible(true);
  }

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

Может кто-то сможет другое решение предложить ?

Добавлено через 8 минут и 16 секунд
А вот и другое решение  smile 
Код

import javax.swing.*;
import javax.swing.plaf.basic.BasicButtonUI;
import javax.swing.plaf.metal.MetalIconFactory;
import java.awt.*;

public class MyPanel {
  static class MyButton extends JButton { 
    @Override
    public void paint(Graphics g) {
      super.paint(g);
      g.drawLine(199, 0, 199, 50);
      super.getIcon().paintIcon(this, g, 200, 10);
    }
  }

  private static void ShowPanels() {
    JFrame myframe = new JFrame("Frame");
    myframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    JPanel panel = new JPanel(new GridLayout(5, 1));
    myframe.getContentPane().add(panel);
    MyButton myButton = new MyButton();
    myButton.setText("My Button");
    myButton.setIcon(new MetalIconFactory.FileIcon16());
    panel.add(myButton);
    myframe.pack();
    myframe.setSize(300, 200);
    myframe.setVisible(true);
  }

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



--------------------
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   jk1
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема »


 




[ Время генерации скрипта: 0.0638 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.