2016-04-16 2 views
0

При нажатии jbutton в jframe, я хочу, чтобы файл Start.java исполнялся, что делать? Start.java работает хорошо. Я хочу, чтобы одно и то же выполнение выполнялось при нажатии на jbutton в jframe, пожалуйста, помогите мне.Как выполнить .java-файл при нажатии jbutton в jframe?

Мой код JFrame имеет JButton

private void jButton3MouseClicked(java.awt.event.MouseEvent evt) { 

    // i want to execute Start.java file on clicking the button 

    Start s = new Start(); 
    String in = s.getTxt; 
    System.out.println(in); 
    repaint(); 
} 

Мой Start.java файл:

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


public class Start extends JPanel{ 

public String getTxt; 
public Start() 
{ 

final JTextField jf = new JTextField(20); 
jf.setBounds(30, 30, 250, 30); 
final JButton j1 = new JButton("OK"); 
j1.setBounds(80, 80, 100, 30); 
setLayout(null); 

add(jf); 
add(j1); 

    j1.addActionListener(new ActionListener() { 
     @Override 
     public void actionPerformed(ActionEvent e) { 


         getTxt = jf.getText(); 
         System.out.println(getTxt); 

        } 
        }); 
    } 


public static void main(String[] args) { 

    JFrame f = new JFrame("Interest"); 
    f.getContentPane().add(new Start()); 
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    f.setPreferredSize(new Dimension(310,250)); 
    f.setMaximumSize(new Dimension(310,250)); 
    f.setMinimumSize(new Dimension(310,250)); 

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

}

+0

Вы думали о добавлении экземпляра 'Start' вас существующий контейнер? Может быть, с помощью «CardLayout»? Вы думали о создании нового 'JFrame' и добавлении своего экземпляра' Start' к нему или, возможно, использования 'JDialog'? – MadProgrammer

+0

Я хотел попробовать добавить экземпляр Start в Jframe, но я не уверен в переходе с одного jframe на другой. Я попробую добавить его в существующий контейнер. –

ответ

3

Итак, основываясь на том, что вы, кажется, делают в коде, я настоятельно рекомендую вам взглянуть на How to Make Dialogs, основная причина этого в том, что модальное диалоговое окно приведет к остановке выполнения вашей программы в точке, где диалог становится видимым и когда он закрыт, таким образом, чтобы вы могли проверить значения, которые пользователь мог изменить.

Так что, когда я впервые пытался получить вашу программу для работы, это то, что случилось ...

Bad

Таким образом, после того, как копаться в коде, я заметил, что ты сделал setLayout(null);. Это продолжит возвращаться, чтобы преследовать вас, и я настоятельно рекомендую вам не делать этого и узнать, как использовать API управления компоновкой.

Итак, я прыгнул в вас код и добавить менеджер компоновки ...

public class Start extends JPanel { 

    public String getTxt; 

    public Start() { 

     final JTextField jf = new JTextField(20); 
     final JButton j1 = new JButton("OK"); 
     setLayout(new GridBagLayout()); 

     GridBagConstraints gbc = new GridBagConstraints(); 
     gbc.gridwidth = GridBagConstraints.REMAINDER; 

     add(jf, gbc); 
     add(j1, gbc); 

     j1.addActionListener(new ActionListener() { 
      @Override 
      public void actionPerformed(ActionEvent e) { 

       getTxt = jf.getText(); 
       System.out.println(getTxt); 

      } 
     }); 
    } 

    public static void main(String[] args) { 

     JFrame f = new JFrame("Interest"); 
     f.getContentPane().add(new Start()); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     f.setPreferredSize(new Dimension(310, 250)); 
     f.setMaximumSize(new Dimension(310, 250)); 
     f.setMinimumSize(new Dimension(310, 250)); 

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

Теперь я получаю ...

better

Хорошо, но теперь есть две кнопки, и если пользователь не нажимает среднюю кнопку, текст никогда не устанавливается!

Дело в том, что для этой вещи вам не нужна кнопка! Вам просто нужен метод, который может вернуть текущий текст JTextField, например ...

public class Start extends JPanel { 

    final JTextField jf = new JTextField(20); 

    public Start() { 
     setLayout(new GridBagLayout()); 

     GridBagConstraints gbc = new GridBagConstraints(); 
     gbc.gridwidth = GridBagConstraints.REMAINDER; 

     add(jf, gbc); 
    } 

    public String getText() { 
     return jf.getText(); 
    } 

    public static void main(String[] args) { 

     JFrame f = new JFrame("Interest"); 
     f.getContentPane().add(new Start()); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     f.setPreferredSize(new Dimension(310, 250)); 
     f.setMaximumSize(new Dimension(310, 250)); 
     f.setMinimumSize(new Dimension(310, 250)); 

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

И тогда я могу использовать ...

Done!

import java.awt.Dimension; 
import java.awt.EventQueue; 
import java.awt.GridBagConstraints; 
import java.awt.GridBagLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JOptionPane; 
import javax.swing.JPanel; 
import javax.swing.JTextField; 
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("Surprise"); 
      add(btn); 

      btn.addActionListener(new ActionListener() { 
       @Override 
       public void actionPerformed(ActionEvent e) { 
        Start start = new Start(); 
        JOptionPane.showMessageDialog(TestPane.this, start, "Surprise", JOptionPane.PLAIN_MESSAGE); 
        System.out.println(start.getText()); 
       } 
      }); 
     } 

     @Override 
     public Dimension getPreferredSize() { 
      return new Dimension(200, 200); 
     } 

    } 
} 

, чтобы показать !

я настоятельно рекомендую вам взять время, чтобы посмотреть на Laying Out Components Within a Container

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