2015-06-08 3 views
0

мне было дано задание, в котором мне нужно для использования JCheckBoxMenuItem и добавьте изображение к нему с правой стороныДобавить к JCheckBoxMenuItem

enter image description here

Я использовал метод SetIcon().

Создал пользовательскую панель и добавил к ней изображение, а затем добавил панель к флажку.

Пытался добавить панель, как показано ниже.

JCheckBoxMenuItem item = new JCheckBoxMenuItem(); 
    item.setText("Option1"); 
    JPanel panel = new JPanel(new FlowLayout(FlowLayout.RIGHT)); 
    JLabel label = new JLabel(new ImageIcon(
         "C:\\Users\\abcd\\Desktop\\facebook.jpg")); 
    panel.add(label); 
    item.add(panel); 

Вышеизложенное выглядело как работа, но только изображение с правой стороны было видно, и флажок и текст отсутствовали.

+0

1) Для лучшей помощи рано, опубликовать [MCVE] (http://stackoverflow.com/help/mcve) (минимальный полный пример поддающегося проверке) или [SSCCE] (HTTP://www.sscce.org/) (Short, Self Contained, Correct Example). 2) Один из способов получить изображение (-ы) для примера - это горячая ссылка на изображения, видимые в [этом Q & A] (http://stackoverflow.com/q/19209650/418556). .. –

+0

.. 3) Ресурсы приложений станут внедряемыми ресурсами к моменту развертывания, поэтому разумно начать доступ к ним, как если бы они были, прямо сейчас. К [тегу: embedded-resource] должен быть доступен URL, а не файл. См. [Info. страница для встроенного ресурса] (http://stackoverflow.com/tags/embedded-resource/info) для того, как формировать URL-адрес. –

+0

BTW - почему вы добавляете значок в 'JLabel', когда' JCheckBoxMenuItem' уже имеет метод 'setIcon()'? –

ответ

3

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

enter image description here

import java.awt.*; 
import java.awt.image.BufferedImage; 
import javax.swing.*; 
import javax.swing.border.EmptyBorder; 

public class CheckBoxMenuItemIconPosition { 

    private JComponent ui = null; 
    private JMenuBar mb = null; 

    CheckBoxMenuItemIconPosition() { 
     initUI(); 
    } 

    public void initUI() { 
     if (ui!=null) return; 

     ui = new JPanel(new BorderLayout(4,4)); 
     ui.setBorder(new EmptyBorder(40,160,40,160)); 
    } 

    public JComponent getUI() { 
     return ui; 
    } 

    public JMenuBar getMenuBar() { 
     if (mb != null) return mb; 

     mb = new JMenuBar(); 

     JMenu fileMenu = new JMenu("File"); 
     mb.add(fileMenu); 

     BufferedImage bi = new BufferedImage(20, 20, BufferedImage.TYPE_INT_RGB); 
     JCheckBoxMenuItem checkBoxMenuItem = new JCheckBoxMenuItem(
       "Text", new ImageIcon(bi)); 
     checkBoxMenuItem.setHorizontalTextPosition(SwingConstants.LEFT); 
     fileMenu.add(checkBoxMenuItem); 

     return mb; 
    } 

    public static void main(String[] args) { 
     Runnable r = new Runnable() { 
      @Override 
      public void run() { 
       CheckBoxMenuItemIconPosition o = new CheckBoxMenuItemIconPosition(); 

       JFrame f = new JFrame(o.getClass().getSimpleName()); 
       f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
       f.setLocationByPlatform(true); 

       f.setContentPane(o.getUI()); 
       f.setJMenuBar(o.getMenuBar()); 
       f.pack(); 
       f.setMinimumSize(f.getSize()); 

       f.setVisible(true); 
      } 
     }; 
     SwingUtilities.invokeLater(r); 
    } 
} 
+1

Я могу выровнять текст в левой части значка, но проблема в том, что есть еще один значок, а не флажок в левой части текста, который Я вижу два значка для JCheckBoxMenuItem, но не флажок. – Gurpaldeep

2

См http://www.java2s.com/Code/Java/Swing-JFC/Aquickdemonstrationofcheckboxmenuitems.htm

Уделите минуту, чтобы прочитать этот код.

TLDR:

JMenuToolbar jmt = new JMenuToolBar(); // ignore for now, will be added to JFrame 

JMenu menu = new JMenu("File") // create a new JMenu that can be 'dropped down' 
JCheckBoxMenuItem open = new JCheckBoxMenuItem("Open",new ImageIcon("open_img.gif")); // add a JCheckBoxMenuItem to add to JMenu 

menu.add(open); // add to menu 
jmt.add(menu); // add to JMenuToolBar 

// in main or wherever, add the JMenuToolBar 
JFrame frame = new JFrame("Window"); 
frame.add(jmt); // add to main Frame