Создание простого графического интерфейса с использованием библиотеки Swing в Java 1.6 - PullRequest
3 голосов
/ 19 сентября 2011

Я пытаюсь создать простой графический интерфейс с использованием библиотеки Swing.Я не понимаю, почему моя таблица стирает все, что ранее было добавлено в графический интерфейс, и только потом создает таблицу.Я предполагаю, что это определенная команда в addMainPanel, но я не уверен, какая.Ваш совет будет высоко ценится.

package fuelConsumption;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;

public class LogView implements ActionListener {

    private Log myLog;
    private JFrame frame;

    public LogView (String frameName) {
        this.frame = new JFrame(frameName);
        this.frame.setPreferredSize(new Dimension(500,500));
        this.frame.getContentPane().setLayout(new BorderLayout());

        this.addMainPanel(frame);
        this.addTable(frame);
        //addMenu(frame);
        //addToolBar(frame);

        this.frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.frame.pack();
        this.frame.setVisible(true);
    }

    private void addTable(JFrame frame2) {
        String[] columnNames = {"date",
                               "station",
                               "fuel grade",
                               "fuel amount",
                               "fuel unit cost",
                               "fuel cost",
                               "trip distance"};
        Object[][] data = {
            {"Shell", 89, 40, 109.5, "bla", 100, 123}
        };

        JTable table = new JTable(data, columnNames);
        table.setPreferredScrollableViewportSize(new Dimension(500, 70));
        //table.setFillsViewportHeight(true);

        //Create the scroll pane and add the table to it.
        JScrollPane scrollPane = new JScrollPane(table);

        //Add the scroll pane to this panel.
        //this.frame.setContentPane(scrollPane);
        frame2.getContentPane().add(scrollPane);
    }

    private void addMainPanel(JFrame frame2) {
        // TODO Auto-generated method stub

        JPanel panel = new JPanel(new GridBagLayout());

        GridBagConstraints c = new GridBagConstraints();
        c.gridx = 0;
        c.gridy = 0;
        c.gridwidth = 5;
        c.ipady = 50;
        c.anchor = GridBagConstraints.LINE_START;
        c.weightx = 0.5;
        c.weighty = 0.5;
        JLabel label = new JLabel("");
        panel.add(label,c);

        label = new JLabel("Info");
        c = new GridBagConstraints();
        c.gridx = 0;
        c.gridy = 1;
        c.anchor = GridBagConstraints.LINE_START;
        c.weightx = 0.5;
        c.weighty = 0.5;
        panel.add(label,c);

        label = new JLabel("Label");
        c = new GridBagConstraints();
        c.gridx = 2;
        c.gridy = 1;
        c.anchor = GridBagConstraints.LINE_START;
        c.weightx = 0.5;
        c.weighty = 0.5;
        panel.add(label,c);

        label = new JLabel("Comments");
        c = new GridBagConstraints();
        c.gridx = 0;
        c.gridy = 2;
        c.anchor = GridBagConstraints.FIRST_LINE_START;
        c.weightx = 0.5;
        c.weighty = 0.5;
        panel.add(label,c);

        JTextArea textArea = new JTextArea(4,30);
        JScrollPane textScroll = new JScrollPane(textArea);
        c = new GridBagConstraints();
        c.gridx = 1;
        c.gridy = 2;
        c.gridwidth = 4;
        c.ipadx = 30;
        c.ipady = 50;
        c.anchor = GridBagConstraints.FIRST_LINE_START;
        c.fill = GridBagConstraints.HORIZONTAL;
        c.weightx = 0.5;
        c.weighty = 0.5;
        panel.add(textScroll,c);

        JButton button = new JButton("Edit");
        button.addActionListener(this);
        button.setActionCommand("Edit");
        c = new GridBagConstraints();
        c.gridx = 1;
        c.gridy = 3;
        c.fill = GridBagConstraints.HORIZONTAL;
        c.weightx = 0.5;
        c.weighty = 0.5;
        panel.add(button,c);

        button = new JButton("Previous");
        button.addActionListener(this);
        button.setActionCommand("Previous");
        c = new GridBagConstraints();
        c.gridx = 2;
        c.gridy = 3;
        c.weightx = 0.5;
        c.weighty = 0.5;
        panel.add(button,c);

        button = new JButton("Next");
        button.addActionListener(this);
        button.setActionCommand("Next");
        c = new GridBagConstraints();
        c.gridx = 3;
        c.gridy = 3;
        //        c.weightx = 0.5;
        //        c.weighty = 0.5;
        panel.add(button,c);

        frame2.getContentPane().add(panel);
    }

    public static void main(String [] args){
        new LogView("Fuel Consumption");
    }

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

    }
}

Ответы [ 3 ]

6 голосов
/ 19 сентября 2011

Ваш графический интерфейс может быть:

enter image description here

Если вы измените

private void addTable(JFrame frame2) { до private void addTable() {

и

frame2.getContentPane().add(scrollPane); до frame.add(scrollPane, BorderLayout.CENTER);

до:

private void addMainPanel(JFrame frame2) { до private void addMainPanel() {

и

frame2.getContentPane().add(panel); до frame.add(panel, BorderLayout.SOUTH);

Поскольку в BorderLayout только один JComponent может быть помещен в одну из областей, поскольку нет определений для констант BorderLayout, тогда JComponent будет помещен в BorderLayout.CENTER область.

3)

Тогда вы должны изменить

this.addMainPanel(frame);
this.addTable(frame);

до

this.addMainPanel();
this.addTable();
4 голосов
/ 19 сентября 2011

Макет по умолчанию JFrame равен BorderLayout, поэтому вам нужно что-то подобное в ваших addTable и addMainPanel методах соответственно:

frame2.add(scrollPane, BorderLayout.CENTER);
frame2.add(panel, BorderLayout.SOUTH);

Обратите внимание, что getContentPane() не требуется.

2 голосов
/ 19 сентября 2011

Вы смешиваете макеты, компоненты ...

Если вы хотите добавить панель и таблицу к фрейму как два отдельных компонента (не таблицу внутри панели), следует позаботиться о компоновке фрейма, BorderLayout. Вы должны добавить панель и таблицу в рамку, используя указатели к макету для размещения компонентов, например:

 frame2.getContentPane().add(scrollPane, BorderLayout.SOUTH);

и

frame2.getContentPane().add(panel, BorderLayout.NORTH);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...