2013-12-13 4 views
0

Я пробовал коды от разных сайтов и один отсюда о цвете. Как мне настроить цветной редактор для печати с помощью jmenu?ColorChooser, щелкнув JMenu Item

Я смотрел на ColorChooser Example, а также Oracle Color Chooser Example, а затем реализует в исходный класс, используя следующий код:

JMenuItem clr = new JMenuItem("Font Color"); 
    clr.addActionListener(new ActionListener(){ 

     public void actionPerformed(ActionEvent e) 
     { 
      ColorChooserDemo ccd = new ColorChooserDemo(); 
      ccd.setVisible(true); 
     } 
    }); 

Но это, кажется, не делать ничего, когда я нажимаю пункт меню.

Код класса с веб-страницы oracle. Это следующий класс, который я использую (сокращенно, конечно, к проблеме). Я делаю блокнот, так как возвращаюсь к программированию и обновляю свою память о том, как делать вещи в java. Проблема в руке, я не могу получить выбор цвета, чтобы придумать, когда я нажимаю на JMenuItem CLR (что цвет шрифта) следующий код показать, что я до сих пор:

Color Chooser Класс:

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

/* ColorChooserDemo.java requires no other files. */ 
@SuppressWarnings("serial") 
public class ColorChooserDemo extends JPanel 
           implements ChangeListener { 

    protected JColorChooser tcc; 
    protected JLabel banner; 

    public ColorChooserDemo() { 
     super(new BorderLayout()); 

     //Set up color chooser for setting text color 
     tcc = new JColorChooser(); 
     tcc.getSelectionModel().addChangeListener(this); 
     tcc.setBorder(BorderFactory.createTitledBorder(
              "Choose Text Color")); 

     add(tcc, BorderLayout.PAGE_END); 
    } 

    public void stateChanged(ChangeEvent e) { 
     Color newColor = tcc.getColor(); 
     FirstWindow.ta1.setForeground(newColor); 
    } 

    /** 
    * Create the GUI and show it. For thread safety, 
    * this method should be invoked from the 
    * event-dispatching thread. 
    */ 
    private static void createAndShowGUI() { 
     //Create and set up the window. 
     JFrame frame = new JFrame("ColorChooserDemo"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     //Create and set up the content pane. 
     JComponent newContentPane = new ColorChooserDemo(); 
     newContentPane.setOpaque(true); //content panes must be opaque 
     frame.setContentPane(newContentPane); 

     //Display the window. 
     frame.pack(); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     //Schedule a job for the event-dispatching thread: 
     //creating and showing this application's GUI. 
     javax.swing.SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       createAndShowGUI(); 
      } 
     }); 
    } 
} 

Главный класс:

импорт java.awt.EventQueue;

public class Main{ 
    protected static Object fw; 

    public static void main(String[] args) 
    { 
     EventQueue.invokeLater(new Runnable(){ 

      @Override 
      public void run() { 
       // TODO Auto-generated method stub 
       try 
       { 
        FirstWindow fw = new FirstWindow(); 
        fw.setVisible(true); 
       } catch (Exception e) 
       { 
        e.printStackTrace(); 
       } 

      } 

     }); 
    } 
} 

FirstWindow класс:

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


public class FirstWindow extends JFrame { 
    private static final long serialVersionUID = 1L; 
    protected JColorChooser tcc; 
    protected static JTextArea ta1; 

    public FirstWindow() { 
     super("Note Pad"); 

     Font font = new Font("Verdana", Font.BOLD, 12); 

     //Setting the size of the note pad 
     setSize(650, 745); 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 

     //Create the MenuBar 
     JMenuBar mb = new JMenuBar(); 
     setJMenuBar(mb); 

     //Create the panel to hold everything in 
     JPanel p = new JPanel(); 

     //Create the Text Area 
     final JTextArea ta1 = new JTextArea(); 
     ta1.setFont(font); 
     ta1.setMargin(new Insets(5,5,5,5)); 
     ta1.setLineWrap(true); 
     ta1.setWrapStyleWord(true); 

     //Create the Scroll Pane to hold the Text Area 
     final JScrollPane sp = new JScrollPane(ta1); 
     sp.setPreferredSize(new Dimension(625,675)); 
     sp.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED); 

     //Create the menu's 
     JMenu format = new JMenu("Format"); 

      //Create menu item for picking font color 
     JMenuItem clr = new JMenuItem("Font Color"); 
     clr.addActionListener(new ActionListener(){ 

      public void actionPerformed(ActionEvent e) 
      { 
       ColorChooserDemo ccd = new ColorChooserDemo(); 
       ccd.setVisible(true); 
      } 
     }); 

     //adding the menu items to the file menu tab 

     //adding menu items to the edit tab 

     //adding menu items to the format tab 
     format.add(clr); 

     //adding the menus to the menu bar 
     mb.add(format); 


     //adding the scroll pane to the panel 
     p.add(sp); 
     add(p, BorderLayout.CENTER); 

    } 
} 
+2

Для лучшей помощи рано, опубликовать [SSCCE ] (http://sscce.org/). * «Мне было интересно, можно ли реализовать это действие, когда вы нажимаете на JMenuItem». * Конечно, это возможно. В стороне этот «вопрос» не содержит «?». –

ответ

0

Вероятно, самый простой способ показать ColorChooser заключается в следующем:

В классе ColorChooserDemo, у вас есть метод private static void createAndShowGUI(), который вы должны объявить общественности.

Затем замените ActionListener для пункта меню к следующему:

clr.addActionListener(new ActionListener(){ 

     public void actionPerformed(ActionEvent e) 
     { 
      ColorChooserDemo.createAndShowGUI(); 
     } 
    }); 

Ваш класс ColorChooserDemo расширяет JPanel, не JFrame. Сначала вам нужен JFrame, затем добавьте панель, затем покажите JFrame. Это то, что происходит в методе createAndShowGUI().

Редактировать: Я понял, что вы только хотели знать, как показать ColorChooserDemo при выборе пункта меню.

Однако, на самом деле установить цвет, вы можете пропустить, используя свой собственный класс ColorChooserDemo и заменить код ActionListener следующим:

clr.addActionListener(new ActionListener(){ 

     public void actionPerformed(ActionEvent e) 
     { 
      Color c = JColorChooser.showDialog(ta1, "ColorChooserDemo", null); 
      ta1.setForeground(c); 
     } 
    }); 
+0

Я также пробовал это, но дал ошибку из-за этого, пытаясь установить цвет JTextArea в классе FirstWindow. – Jaybro90

+0

+1 Спасибо, это сработало! Ответ принят. – Jaybro90

0

SSCE легче не только для нас, чтобы обеспечить решение, как предложил Эндрю, но это также поможет вам понять и понять, что делать. Во всяком случае, вот быстрый пример открытия выбора цвета после нажатия JMenuItem:

item.addActionListener(new ActionListener() { 
    @Override 
    public void actionPerformed(ActionEvent e) { 
     JColorChooser jColorChooser = new JColorChooser(); 

     JDialog jDialog = new JDialog(); 
     jDialog.setContentPane(jColorChooser); 
     jDialog.pack(); 
     jDialog.setVisible(true); 
    } 
}); 

LE: (извините, новый цвет, кто выбирает сам) или просто использовать JColorChooser.showDialog()

+0

Я пробовал это и добавил public void stateChanged (ChangeEvent) {...} в конце класса и jColorChooser.getSelectionModel(). AddChangeListener (listener); в этот ActionListener, но не будет работать. Без ActionListener он устанавливает цвет, но только после того, как вы дважды нажмете элемент меню и не измените цвет, щелкнув цвета внутри JColorChooser. – Jaybro90