2013-09-24 2 views
0

Я довольно неопытен с Java и довольно много искал, чтобы решить эту проблему. Я считаю, что у меня правильный код, но мои вкладки ничего не показывают. Я наткнулся на что-то об изменении макета на BorderLayout, но это не сработало для меня. Когда я запускаю программу, я вижу очень быстрый взгляд на мою первую программу вкладок, тогда она пустая. Я опубликовал только класс TabbedPrograms, потому что я считаю, что проблема здесь, но я могу опубликовать все остальное, если это необходимо. Спасибо заранее за любую помощь.Панель с вкладками Java, не показывающая программы

import java.awt.BorderLayout; 
import javax.swing.JFrame; 
import javax.swing.JTabbedPane; 


public class TabbedPrograms extends JFrame 
{ 
public TabbedPrograms() 
{ 
    setTitle("Week Four Lab Assignment"); 
    setLayout(new BorderLayout()); //this is what I added to change from the default layout 
    JTabbedPane jtp = new JTabbedPane(); 
    getContentPane().add(jtp); 

    jtp.addTab("Day GUI", new DayGUI()); 
    jtp.addTab("Office Area Calculator", new OfficeAreaCalculator()); 

    getContentPane().add(jtp); 
    setSize(310, 210); 
    setVisible(true); 
} 

public static void main(String[] args) 
{ 
    TabbedPrograms test = new TabbedPrograms(); 
    test.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

} 

} 

import java.awt.Color; 
import java.awt.Container; 
import java.awt.FlowLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.awt.event.WindowAdapter; 
import java.awt.event.WindowEvent; 

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

public class DayGUI extends JPanel 
{ 
private JFrame mainFrame; 
private JButton cmdGood; 
private JButton cmdBad; 

public DayGUI() 
{ 
    mainFrame = new JFrame("Messages"); 

    cmdGood = new JButton("Good"); 
    cmdBad = new JButton("Bad"); 

    Container c = mainFrame.getContentPane(); 
    c.setLayout(new FlowLayout()); 
    c.setBackground(Color.orange); 

    c.add(cmdGood); 
    c.add(cmdBad); 

    cmdGood.setMnemonic('G'); 
    cmdBad.setMnemonic('B'); 

    mainFrame.setSize(300, 100); 

    mainFrame.addWindowListener(new WindowAdapter() { 
     public void windowClosing(WindowEvent e) { 
      System.exit(0); 
     } 

}); 

    ButtonsHandler bhandler = new ButtonsHandler(); 
    cmdGood.addActionListener(bhandler); 
    cmdBad.addActionListener(bhandler); 

    mainFrame.setVisible(true); 
} 

class ButtonsHandler implements ActionListener 
{ 
    public void actionPerformed(ActionEvent e) { 

     if(e.getSource() == cmdGood) 
      JOptionPane.showMessageDialog(null, "Today is a good day!", 
        "Event Handler Message", 
        JOptionPane.INFORMATION_MESSAGE); 

     if(e.getSource() == cmdBad) 
      JOptionPane.showMessageDialog(null, "Today is a bad day!", 
        "Event Handler Message", 
        JOptionPane.INFORMATION_MESSAGE); 
    } 
} 

public static void main(String[] args) 
{ 
    DayGUI app; 
    app = new DayGUI(); 

} 

} 


import java.awt.Container; 
import java.awt.FlowLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.awt.event.FocusEvent; 
import java.awt.event.FocusListener; 
import java.awt.event.WindowAdapter; 
import java.awt.event.WindowEvent; 
import java.text.DecimalFormat; 

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

public class OfficeAreaCalculator extends JPanel 
{ 
private JFrame mainFrame; 
private JButton calculateButton; 
private JButton exitButton; 
private JTextField lengthField; 
private JTextField widthField; 
private JTextField areaField; 
private JLabel lengthLabel; 
private JLabel widthLabel; 
private JLabel areaLabel; 

public OfficeAreaCalculator() 
{ 
    mainFrame = new JFrame("Office Area Calculator"); 

    exitButton = new JButton("Exit"); 
    lengthLabel = new JLabel("Enter the length of the office:"); 
    widthLabel = new JLabel("Enter the width of the office:"); 
    areaLabel = new JLabel("Office area:"); 
    lengthField = new JTextField(5); 
    widthField = new JTextField(5); 
    areaField = new JTextField(5); 
    areaField.setEditable(false); 
    calculateButton = new JButton("Calculate"); 

    Container c = mainFrame.getContentPane(); 

    c.setLayout(new FlowLayout()); 

    c.add(lengthLabel); 
    c.add(lengthField); 
    c.add(widthLabel); 
    c.add(widthField); 
    c.add(areaLabel); 
    c.add(areaField); 
    c.add(calculateButton); 
    c.add(exitButton); 

    calculateButton.setMnemonic('C'); 
    exitButton.setMnemonic('X'); 

    mainFrame.setSize(260, 150); 

    mainFrame.addWindowListener(new WindowAdapter() { 
     public void windowClosing(WindowEvent e) { 
      System.exit(0); 
     } 
    }); 


    CalculateButtonHandler chandler = new CalculateButtonHandler(); 
    calculateButton.addActionListener(chandler); 

    ExitButtonHandler ehandler = new ExitButtonHandler(); 
    exitButton.addActionListener(ehandler); 

    FocusHandler fhandler = new FocusHandler(); 
    lengthField.addFocusListener(fhandler); 
    widthField.addFocusListener(fhandler); 
    areaField.addFocusListener(fhandler); 

    mainFrame.setVisible(true); 
     } 

class CalculateButtonHandler implements ActionListener 
{ 
    public void actionPerformed(ActionEvent e) 
    { 
     DecimalFormat num = new DecimalFormat(", ###.##"); 
     double width, length, area; 
     String instring; 

     instring = lengthField.getText(); 
     if(instring.equals("")) 
     { 
      instring = ("0"); 
      lengthField.setText("0"); 
     } 
     length = Double.parseDouble(instring); 

     instring = widthField.getText(); 
     if(instring.equals("")) 
     { 
      instring = "0"; 
      widthField.setText("0"); 
     } 
     width = Double.parseDouble(instring); 

     area = length * width; 
     areaField.setText(num.format(area)); 

    } 
} 

class ExitButtonHandler implements ActionListener { 
    public void actionPerformed(ActionEvent e) { 
     System.exit(0); 
    } 
} 

class FocusHandler implements FocusListener 
{ 
    public void focusGained(FocusEvent e) 
    { 
     if(e.getSource() == lengthField || e.getSource() == widthField) 
     { 
      areaField.setText(""); 
     } 
     else if (e.getSource() == areaField) 
     { 
      calculateButton.requestFocus(); 
     } 
    } 

    public void focusLost(FocusEvent e) 
    { 
     if(e.getSource() == widthField) 
     { 
      calculateButton.requestFocus(); 
     } 
    } 
} 

} 
+2

Вы добавляете 'jtp' два раза (до и после добавления вкладок). Удаление первой записи и просмотр того, что происходит – Smit

+0

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

+0

Это ссылка на возможное решение, которое я нашел, но это не сработало для меня. [link] http://stackoverflow.com/questions/16973919/java-why-is-this-tabbed-pane-not-working-correctly – user2802680

ответ

1

Проблема заключается в том, что оба DayGUI и OfficeAreaCalculator как добавлять компоненты в свои собственные индивидуальные JFrame окна, а не TabbedPrograms. Эти кадры появляются одновременно, тогда отображается основной кадр приложения.

В обеих этих контейнерах добавить компоненты непосредственно на JPanel так, чтобы компоненты появляются на JTabbedPane

Например

//c.add(lengthLabel); 
add(lengthLabel); 
+0

Большое вам спасибо! Я знал, что это, скорее всего, что-то незначительное. Я узнал что-то новое, что, я уверен, мне понадобится в будущем. Еще раз спасибо. – user2802680

+0

Нет проблем, приветствую вас :) – Reimeus

0

Что-то не так с вашей логикой коды, вы хотите добавить день() и Calc() на ваш JTabbedPane, оба из которых расширяют JPanel, которые вы должны использовать и добавлять элементы при добавлении их в панель вкладок. Вместо этого в своих объектах Day() и Calc() вы создаете новые объекты JFrame(), которые, как мне кажется, не видны (геттеры) внутри вашей основной функции.

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