导入一个JLabel阵列成一个JComponent [英] Importing a JLabel array into a JComponent

查看:306
本文介绍了导入一个JLabel阵列成一个JComponent的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我环顾四周,试图解决我的问题,但找不到任何解决这个问题。我真的很新的Java和我试图做从书的项目,而无需使用控制台,但这里是我,

I looked around trying to resolve my issue but could not find anything to resolve this. I am really new to java and am trying to do projects from the book without using the console but here is what I have,

import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JOptionPane;


public class FutureInvestmentValue {
public static void main(String[] args) {
    double investmentAmount = Double.parseDouble(JOptionPane.showInputDialog(null, "Enter in the investment amount as a double.", "Investment Amout",
            JOptionPane.PLAIN_MESSAGE));

    double monthlyInterestRate = Double.parseDouble(JOptionPane.showInputDialog(null, "Enter in the monthly interest rate as a double.", "Monthly Interest Rate",
            JOptionPane.PLAIN_MESSAGE));

    int years = 30;

    final JComponent[] outputHeader = new JComponent[] {
            new JLabel("The amount invested: " + investmentAmount),
            new JLabel("Annual interest Rate: " + monthlyInterestRate),
            new JLabel("Years       Future Value"),
    };


    JOptionPane.showMessageDialog(null, outputHeader + futureInvestmentValue(investmentAmount, monthlyInterestRate, years), "Future Investment Value",
            JOptionPane.INFORMATION_MESSAGE);
}

public static JComponent[] futureInvestmentValue(double investmentAmount, double monthlyInterestRate, int years) {
    final JComponent[] investmentArray = new JComponent[years];
    for (int i = 1; i <= years; i++) {
        double investmentTotal = investmentAmount + (investmentAmount * ((monthlyInterestRate / 10) * i));
        investmentArray[i] = new JLabel(i + "              " + investmentTotal);
    }

return investmentArray;
}
}

和似乎我越来越被告知要改变futureInvestmentValue()错误;到一个JComponent当我做了另一个错误发生,它只是运行我在圈子与JLabel的更改为JLabel的[]以Jcomponent的到Jcomponent的[],什么不是。任何帮助,可以解释给我用的措词不会是混乱的一个新手将AP preciated。

and it seems that I am getting errors that are telling to to change futureInvestmentValue(); to a Jcomponent and when I do that another error happens and it just runs me in circles with changing from JLabel to JLabel[] to Jcomponent to Jcomponent[] and what not. Any help that can explain it to me in terms that wouldnt be confusing to a newbie would be appreciated.

推荐答案


  • 为什么你创建的JLabel的数组,使用JTable的替代,

import java.awt.*;
import java.awt.event.ActionEvent;
import java.util.Random;
import java.util.concurrent.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.table.DefaultTableModel;

public class ChangeNotifiersOnEvent extends JFrame implements Runnable {

    private static final long serialVersionUID = 1L;
    private boolean runProcess = true;
    private Random random = new Random();
    private javax.swing.Timer timerRun;
    private Executor executor = Executors.newCachedThreadPool();
    private String[] columnNames = {"Source", "Hit", "Last", "Ur_Diff"};
    private JTable table;
    private Object[][] data = {{"Swing Timer", 2.99, 5, 1.01},
        {"Swing Worker", 7.10, 5, 1.010}, {"TableModelListener", 25.05, 5, 1.01}};
    private DefaultTableModel model = new DefaultTableModel(data, columnNames);

    public ChangeNotifiersOnEvent() {
        table = new JTable(model) {

            private static final long serialVersionUID = 1L;

            @Override
            public Class getColumnClass(int column) {
                return getValueAt(0, column).getClass();
            }
        };
        model.addTableModelListener(new TableModelListener() {

            @Override
            public void tableChanged(TableModelEvent tme) {
                if (tme.getType() == TableModelEvent.UPDATE) {
                    if (tme.getColumn() == 1 && tme.getLastRow() == 2) {
                        double dbl = ((Double) table.getModel().getValueAt(2, 1))
                                - ((Integer) table.getModel().getValueAt(2, 2));
                        table.getModel().setValueAt(dbl, 2, 3);
                    } else if (tme.getColumn() == 1 && tme.getLastRow() == 0) {
                        prepareUpdateTableCell();
                    } else if (tme.getColumn() == 1 && tme.getLastRow() == 1) {
                        executor.execute(new MyTask(MyTask.UPDATE_TABLE_COLUMN));
                    }
                }
            }
        });
        table.setRowHeight(30);
        table.setFont(new Font("Serif", Font.BOLD, 20));
        table.getColumnModel().getColumn(0).setPreferredWidth(180);
        table.setPreferredScrollableViewportSize(table.getPreferredSize());
        JScrollPane scrollPane = new JScrollPane(table);
        add(scrollPane, BorderLayout.CENTER);
        new Thread(this).start();
    }

    private void prepareUpdateTableCell() {
        timerRun = new javax.swing.Timer(10, UpdateTableCell());
        timerRun.setRepeats(false);
        timerRun.start();
    }

    private Action UpdateTableCell() {
        return new AbstractAction("Update Table Cell") {

            private static final long serialVersionUID = 1L;

            @Override
            public void actionPerformed(ActionEvent e) {
                double dbl = ((Double) table.getModel().getValueAt(0, 1))
                        - ((Integer) table.getModel().getValueAt(0, 2));
                table.getModel().setValueAt(dbl, 0, 3);
            }
        };
    }

    @Override
    public void run() {
        while (runProcess) {
            try {
                Thread.sleep(330);
            } catch (Exception e) {
                e.printStackTrace();
            }
            changeTableValues();
        }
    }

    private void changeTableValues() {
        Runnable doRun = new Runnable() {

            @Override
            public void run() {
                table.getModel().setValueAt(random.nextInt(128) + random.nextDouble(), 0, 1);
                table.getModel().setValueAt(random.nextInt(256) + random.nextDouble(), 1, 1);
                table.getModel().setValueAt(random.nextInt(512) + random.nextDouble(), 2, 1);

                table.getModel().setValueAt(random.nextInt(128), 0, 2);
                table.getModel().setValueAt(random.nextInt(128), 1, 2);
                table.getModel().setValueAt(random.nextInt(128), 2, 2);
            }
        };
        SwingUtilities.invokeLater(doRun);
    }

    private class MyTask extends SwingWorker<Void, Integer> {

        private static final String UPDATE_TABLE_COLUMN = "update";
        private String namePr;
        private double dbl;

        MyTask(String str) {
            this.namePr = str;
        }

        @Override
        protected Void doInBackground() throws Exception {
            dbl = ((Double) table.getModel().getValueAt(1, 1))
                    - ((Integer) table.getModel().getValueAt(1, 2));
            return null;
        }

        @Override
        protected void done() {
            SwingUtilities.invokeLater(new Runnable() {

                @Override
                public void run() {
                    table.getModel().setValueAt(dbl, 1, 3);
                }
            });
        }
    }

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

            @Override
            public void run() {
                ChangeNotifiersOnEvent frame = new ChangeNotifiersOnEvent();
                frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
                frame.setLocation(150, 150);
                frame.pack();
                frame.setVisible(true);
            }
        });
    }
}


  • 您可以添加/上运行时删除的行(S),

  • import java.awt.*;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import javax.swing.*;
    import javax.swing.table.*;
    
    public class RemoveAddRows extends JFrame {
    
        private static final long serialVersionUID = 1L;
        private Object[] columnNames = {"Type", "Company", "Shares", "Price"};
        private Object[][] data = {
            {"Buy", "IBM", new Integer(1000), new Double(80.50)},
            {"Sell", "MicroSoft", new Integer(2000), new Double(6.25)},
            {"Sell", "Apple", new Integer(3000), new Double(7.35)},
            {"Buy", "Nortel", new Integer(4000), new Double(20.00)}
        };
        private JTable table;
        private DefaultTableModel model;
    
        public RemoveAddRows() {
    
            model = new DefaultTableModel(data, columnNames) {
    
                private static final long serialVersionUID = 1L;
    
                @Override
                public Class getColumnClass(int column) {
                    return getValueAt(0, column).getClass();
                }
            };
            table = new JTable(model) {
    
                private static final long serialVersionUID = 1L;
    
                @Override
                public Component prepareRenderer(TableCellRenderer renderer, int row, int column) {
                    Component c = super.prepareRenderer(renderer, row, column);
                    int firstRow = 0;
                    int lastRow = table.getRowCount() - 1;
                    int width = 0;
                    if (row == lastRow) {
                        ((JComponent) c).setBackground(Color.red);
                    } else if (row == firstRow) {
                        ((JComponent) c).setBackground(Color.blue);
                    } else {
                        ((JComponent) c).setBackground(table.getBackground());
                    }
                    /*if (!isRowSelected(row)) {
                    String type = (String) getModel().getValueAt(row, 0);
                    c.setBackground("Buy".equals(type) ? Color.GREEN : Color.YELLOW);
                    }
                    if (isRowSelected(row) && isColumnSelected(column)) {
                    ((JComponent) c).setBorder(new LineBorder(Color.red));
                    }*/
                    return c;
                }
            };
            table.setPreferredScrollableViewportSize(table.getPreferredSize());
            JScrollPane scrollPane = new JScrollPane(table);
            add(scrollPane);
            JButton button1 = new JButton("Remove all rows");
            button1.addActionListener(new ActionListener() {
    
                public void actionPerformed(ActionEvent arg0) {
                    if (model.getRowCount() > 0) {
                        for (int i = model.getRowCount() - 1; i > -1; i--) {
                            model.removeRow(i);
                        }
                    }
                    System.out.println("model.getRowCount() --->" + model.getRowCount());
                }
            });
            JButton button2 = new JButton("Add new rows");
            button2.addActionListener(new ActionListener() {
    
                public void actionPerformed(ActionEvent arg0) {
                    Object[] data0 = {"Buy", "IBM", new Integer(1000), new Double(80.50)};
                    model.addRow(data0);
                    Object[] data1 = {"Sell", "MicroSoft", new Integer(2000), new Double(6.25)};
                    model.addRow(data1);
                    Object[] data2 = {"Sell", "Apple", new Integer(3000), new Double(7.35)};
                    model.addRow(data2);
                    Object[] data3 = {"Buy", "Nortel", new Integer(4000), new Double(20.00)};
                    model.addRow(data3);
                    System.out.println("model.getRowCount() --->" + model.getRowCount());
                }
            });
            JPanel southPanel = new JPanel();
            southPanel.add(button1);
            southPanel.add(button2);
            add(southPanel, BorderLayout.SOUTH);
        }
    
        public static void main(String[] args) {
            RemoveAddRows frame = new RemoveAddRows();
            frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
            frame.pack();
            frame.setLocationRelativeTo(null);
            frame.setVisible(true);
        }
    }
    

    这篇关于导入一个JLabel阵列成一个JComponent的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆