2013-05-28 4 views
0

PortSettings Panel screenshotДобавление JPanel к ActionListener

Я создал JPanel, который имеет все JRadioButton, на нем, что мне нужно (это называется PortSettings). У меня также есть кнопка, называемая настройками порта, когда пользователь нажимает кнопку, мне нужно, чтобы JPanel появился и отобразил переключатели. Я попытался добавить JPanel в actionlistener, но он не работает. Мой код ниже. Я удалил все остальные ActionListener с других кнопок, кроме кнопок с настройками порт. Если этот вопрос запутан, извините. Трудно объяснить, что мне нужно делать. Я загрузил рисунок того, как будет выглядеть панель, и снимок экрана моей программы.

import java.awt.BorderLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.JButton; 
import javax.swing.JCheckBox; 
import javax.swing.JLabel; 
import javax.swing.JOptionPane; 
import javax.swing.JPanel; 
import javax.swing.JFrame; 
import javax.swing.JRadioButton; 
import javax.swing.JTabbedPane; 
import javax.swing.JTextArea; 


public class TestApplication implements ActionListener { 
    public static void main(String[] args) { 
     JFrame frame = new JFrame(); 
     frame.setSize(1000, 1000); 
     frame.setTitle("RBA Test Application"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setVisible(true); 


    JTextArea text = new JTextArea(); 
    JLabel logLabel = new JLabel("Input/Output Log"); 



    JRadioButton apprve = new JRadioButton("Approve"); 
    JRadioButton decline = new JRadioButton("Decline"); 
    JRadioButton ethernet = new JRadioButton("Ethernet"); 
    JRadioButton rs = new JRadioButton("RS232"); 
    JRadioButton usbcdc = new JRadioButton("USB_CDC"); 
    JRadioButton usbhid = new JRadioButton("USB_HID"); 

    JButton next = new JButton("Next"); 
    JButton ok = new JButton("OK"); 
    JButton cancel = new JButton("Cancel"); 

    JPanel PortSettings = new JPanel(); 
    PortSettings.add(ethernet); 
    PortSettings.add(rs); 
    PortSettings.add(usbcdc); 
    PortSettings.add(usbhid); 
    PortSettings.add(next); 
    PortSettings.add(cancel); 


    JButton initialize = new JButton("Initialize"); 

    JButton connect = new JButton("Connect"); 

    JButton disconnect = new JButton("Disconnect"); 

    JButton shutdown = new JButton("Shut Down"); 


    JButton portsettings = new JButton("Port Settings"); 
    portsettings.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e) { 




      } 
     }); 


    JButton online = new JButton("Go Online"); 

    JButton offline = new JButton("Go Offline"); 

    JButton status = new JButton("Status"); 

    JButton reboot = new JButton("Reboot"); 


    JButton account = new JButton("Account"); 


    JButton amount = new JButton("Amount"); 

    JButton reset = new JButton("Reset"); 


    JButton approvordecl = new JButton("Approve/Decline"); 

    JButton test = new JButton("Test Button #1"); 

    JButton testing = new JButton("Test Button #2"); 

    JRadioButton button = new JRadioButton("Radio Button"); 

    JRadioButton button2 = new JRadioButton("Radio Button"); 

    JCheckBox checkbox = new JCheckBox("Check Box"); 

    JCheckBox checkbox2 = new JCheckBox("Check Box"); 


    JPanel testPanel = new JPanel(); 
    testPanel.add(button); 
    testPanel.add(button2); 
    testPanel.add(checkbox2); 

    JPanel posPanel = new JPanel(); 
    posPanel.add(test); 
    posPanel.add(testing); 
    posPanel.add(checkbox); 

    JPanel llpPanel = new JPanel(); 
    llpPanel.add(online); 
    llpPanel.add(offline); 
    llpPanel.add(status); 
    llpPanel.add(reboot); 
    llpPanel.add(account); 
    llpPanel.add(amount); 
    llpPanel.add(reset); 
    llpPanel.add(approvordecl); 

    JPanel textPanel = new JPanel(new BorderLayout()); 
    textPanel.add(logLabel); 
    frame.add(logLabel); 


    JPanel buttonPanel = new JPanel(); 
    buttonPanel.add(initialize); 
    buttonPanel.add(connect); 
    buttonPanel.add(disconnect); 
    buttonPanel.add(shutdown); 
    buttonPanel.add(portsettings); 
    frame.add(buttonPanel); 
    frame.add(buttonPanel, BorderLayout.NORTH); 

    JTabbedPane tabbedPane = new JTabbedPane(); 
    tabbedPane.addTab("LLP", null, llpPanel, "Low Level Protocol"); 
    tabbedPane.addTab("POS",null, posPanel, "Point Of Sale"); 
    tabbedPane.addTab("Test", null, testPanel, "Test"); 

    JPanel tabsPanel = new JPanel(new BorderLayout()); 
    tabsPanel.add(tabbedPane); 
    frame.add(tabsPanel, BorderLayout.CENTER); 


    frame.pack(); 



} 

@Override 
public void actionPerformed(ActionEvent arg0) { 
    // TODO Auto-generated method stub 

} 






} 

Я попытался добавить JFrame к ActionListener затем добавьте JPanel в JFrame, но ничего не происходит, когда я нажимаю на кнопку Настройка порта. Кроме того, когда я попытался добавить JPanel в JFrame, он сказал мне поставить финал перед JPanel PortSettings = new JPanel() ;. Вот код.

import java.awt.BorderLayout; 
import java.awt.Component; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.JButton; 
import javax.swing.JCheckBox; 
import javax.swing.JLabel; 
import javax.swing.JOptionPane; 
import javax.swing.JPanel; 
import javax.swing.JFrame; 
import javax.swing.JRadioButton; 
import javax.swing.JTabbedPane; 
import javax.swing.JTextArea; 


public class TestApplication implements ActionListener { 
    public static void main(String[] args) { 
    JFrame frame = new JFrame(); 
    frame.setSize(1000, 1000); 
    frame.setTitle("RBA Test Application"); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setVisible(true); 


    JTextArea text = new JTextArea(); 
    JLabel logLabel = new JLabel("Input/Output Log"); 



    JRadioButton apprve = new JRadioButton("Approve"); 
    JRadioButton decline = new JRadioButton("Decline"); 
    JRadioButton ethernet = new JRadioButton("Ethernet"); 
    JRadioButton rs = new JRadioButton("RS232"); 
    JRadioButton usbcdc = new JRadioButton("USB_CDC"); 
    JRadioButton usbhid = new JRadioButton("USB_HID"); 

    JButton next = new JButton("Next"); 
    JButton ok = new JButton("OK"); 
    JButton cancel = new JButton("Cancel"); 

    final JPanel PortSettings = new JPanel(); 
    PortSettings.add(ethernet); 
    PortSettings.add(rs); 
    PortSettings.add(usbcdc); 
    PortSettings.add(usbhid); 
    PortSettings.add(next); 
    PortSettings.add(cancel); 

    JPanel accountButton = new JPanel(); 
    accountButton.add(ok); 
    accountButton.add(cancel); 

    JPanel apprvordecl = new JPanel(); 
    apprvordecl.add(apprve); 
    apprvordecl.add(decline); 

    JPanel amountButton = new JPanel(); 
    amountButton.add(ok); 
    amountButton.add(cancel); 



    JButton initialize = new JButton("Initialize"); 

    JButton connect = new JButton("Connect"); 

    JButton disconnect = new JButton("Disconnect"); 

    JButton shutdown = new JButton("Shut Down"); 


    JButton portsettings = new JButton("Port Settings"); 
    portsettings.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e) { 
       JFrame port = new JFrame("Port Settings"); 
       port.add(PortSettings); 
       frame.setVisible(true); 





      } 
     }); 

    JButton online = new JButton("Go Online"); 

    JButton offline = new JButton("Go Offline"); 

    JButton status = new JButton("Status"); 

    JButton reboot = new JButton("Reboot"); 


    JButton account = new JButton("Account"); 


    JButton amount = new JButton("Amount"); 

    JButton reset = new JButton("Reset"); 


    JButton approvordecl = new JButton("Approve/Decline"); 

    JButton test = new JButton("Test Button #1"); 

    JButton testing = new JButton("Test Button #2"); 

    JRadioButton button = new JRadioButton("Radio Button"); 

    JRadioButton button2 = new JRadioButton("Radio Button"); 

    JCheckBox checkbox = new JCheckBox("Check Box"); 

    JCheckBox checkbox2 = new JCheckBox("Check Box"); 


    JPanel testPanel = new JPanel(); 
    testPanel.add(button); 
    testPanel.add(button2); 
    testPanel.add(checkbox2); 

    JPanel posPanel = new JPanel(); 
    posPanel.add(test); 
    posPanel.add(testing); 
    posPanel.add(checkbox); 

    JPanel llpPanel = new JPanel(); 
    llpPanel.add(online); 
    llpPanel.add(offline); 
    llpPanel.add(status); 
    llpPanel.add(reboot); 
    llpPanel.add(account); 
    llpPanel.add(amount); 
    llpPanel.add(reset); 
    llpPanel.add(approvordecl); 

    JPanel textPanel = new JPanel(new BorderLayout()); 
    textPanel.add(logLabel); 
    frame.add(logLabel); 


    JPanel buttonPanel = new JPanel(); 
    buttonPanel.add(initialize); 
    buttonPanel.add(connect); 
    buttonPanel.add(disconnect); 
    buttonPanel.add(shutdown); 
    buttonPanel.add(portsettings); 
    frame.add(buttonPanel); 
    frame.add(buttonPanel, BorderLayout.NORTH); 

    JTabbedPane tabbedPane = new JTabbedPane(); 
    tabbedPane.addTab("LLP", null, llpPanel, "Low Level Protocol"); 
    tabbedPane.addTab("POS",null, posPanel, "Point Of Sale"); 
    tabbedPane.addTab("Test", null, testPanel, "Test"); 

    JPanel tabsPanel = new JPanel(new BorderLayout()); 
    tabsPanel.add(tabbedPane); 
    frame.add(tabsPanel, BorderLayout.CENTER); 


    frame.pack(); 



} 

@Override 
public void actionPerformed(ActionEvent arg0) { 
    // TODO Auto-generated method stub 

} 






} 
+0

Возможно, я что-то не понимаю, но могу сделать некоторые jPanels с кнопками на этом JFrame и сделать их видимыми или невидимыми, будет лучшей идеей. –

ответ

1

Вы на правильном пути, но вы не хотите добавлять панель PortSettings в новый JFrame, но где-то на вашем ранее построенном, присвоенном локальной переменной frame. Так что ваши действия слушатель должен скорее быть

portsettings.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 
      frame.add(PortSettings, BorderLayout.SOUTH); 
      frame.pack(); 
     } 
    }); 

(Это при условии, что вы на самом деле хотите, чтобы добавить его к раме в тот момент и не добавить его незримо с самого начала и превратить его видимым, как @Aleksei предложил.)

Сообщение об ошибке final связано с тем, что вы используете PortSettings в (анонимном) внутреннем классе, а именно: ActionListener. В предлагаемой моей модификации то же самое для frame, так что вы должны адаптировать свою декларацию, а также:

final JFrame frame = new JFrame(); 

Причина довольно технической и рядом с точкой прямо сейчас: просто сделать это.

Если вместо этого вы хотите, чтобы панель появиться в отдельном окна, вам нужно JDialog для этого, а не второй JFrame:

portsettings.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 
      JDialog dialog = new JDialog(frame); 
      dialog.add(PortSettings); 
      dialog.pack(); 
      dialog.setVisible(true); 
     } 
    }); 

Посмотрите на JOptionPane класс для богатого выбора способы получить больше функциональности из диалогов.

0

Просто добавьте прослушиватель действий ко всем вашим кнопкам. так:

yourButton.addActionListener(this); 

ли, что для всех кнопок.

Затем возьмите метод actionPreformed вашего TestPalication класса и делать все:

@Override 
public void actionPerformed(ActionEvent arg0) { 
    ((JRadioButton) arg0.getSource()).setTitle("Clicked!"); 
} 

Ваш вопрос был немного запутанным, но я надеюсь, что это проясняет немного.

+0

Когда я нажимаю кнопку portsettings, мне нужна панель PortSettings для вызова. Я только что опубликовал фотографию того, как должна выглядеть панель, когда я закончу ее выкладывание. –

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