0

私はJavaを初めて使用し、最近、単純なアプリケーションの開発を開始しました。今のところ、JScrollPanneに問題がありますが、textareaのテキストが領域のサイズを超えると、下(または上)にスクロールできません。私はいくつかの解決策を検討しましたが、それらはすべてFlowLayot(GridLayoutおよびBoxLayout)用でしたが、GroupLayout用ではありませんでした。コードは次のとおりです。

JPanel conent_p = new JPanel();
    conent_p.setBorder(new TitledBorder(null, "", TitledBorder.LEADING, TitledBorder.TOP, null, null));

    JLabel lblItemName = new JLabel("Item name:");
    itemField = new JTextField();
    itemField.setColumns(10);

    JLabel lblMxPrice = new JLabel("Max price:");   
    mpriceField = new JTextField();
    mpriceField.setColumns(10);

    JLabel lblQuantity = new JLabel("Quantity:");
    quanField = new JTextField();
    quanField.setColumns(10);

    JLabel lblDelivery = new JLabel("Delivery:");
    delivField = new JTextField();
    delivField.setColumns(10);

    JLabel lblLogcat = new JLabel("LogCat:");
    final JTextArea txtConsole = new JTextArea();
    txtConsole.setEditable(false);
    txtConsole.setLineWrap(true);
    txtConsole.setWrapStyleWord(true);

    sbrText = new JScrollPane(txtConsole);
    sbrText.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);

    // Now create a new TextAreaOutputStream to write to our JTextArea control and wrap a
    // PrintStream around it to support the println/printf methods.
    PrintStream out = new PrintStream(new TextAreaOutputStream(txtConsole));
    // redirect standard output stream to the TextAreaOutputStream
    System.setOut(out);
    // redirect standard error stream to the TextAreaOutputStream
    System.setErr(out);

    GroupLayout gl_conent_p = new GroupLayout(conent_p);
    gl_conent_p.setHorizontalGroup(
        gl_conent_p.createParallelGroup(Alignment.LEADING)
            .addGroup(gl_conent_p.createSequentialGroup()
                .addContainerGap()
                .addGroup(gl_conent_p.createParallelGroup(Alignment.LEADING)
                    .addComponent(lblMxPrice, Alignment.TRAILING)
                    .addComponent(lblItemName, Alignment.TRAILING)
                    .addComponent(lblLogcat, Alignment.TRAILING))
                .addGap(18)
                .addGroup(gl_conent_p.createParallelGroup(Alignment.LEADING)
                    .addGroup(gl_conent_p.createSequentialGroup()
                        .addGroup(gl_conent_p.createParallelGroup(Alignment.LEADING, false)
                            .addComponent(itemField, GroupLayout.PREFERRED_SIZE, 365, GroupLayout.PREFERRED_SIZE)
                            .addGroup(gl_conent_p.createSequentialGroup()
                                .addComponent(mpriceField, GroupLayout.PREFERRED_SIZE, 80, GroupLayout.PREFERRED_SIZE)
                                .addGap(18)
                                .addComponent(lblQuantity)
                                .addPreferredGap(ComponentPlacement.RELATED)
                                .addComponent(quanField, 0, 0, Short.MAX_VALUE)
                                .addGap(18)
                                .addComponent(lblDelivery)
                                .addPreferredGap(ComponentPlacement.RELATED)
                                .addComponent(delivField, GroupLayout.PREFERRED_SIZE, 80, GroupLayout.PREFERRED_SIZE)
                                .addPreferredGap(ComponentPlacement.RELATED)))
                        .addGap(100))
                    .addGroup(gl_conent_p.createSequentialGroup()
                        .addComponent(txtConsole, GroupLayout.PREFERRED_SIZE, 345, GroupLayout.PREFERRED_SIZE)
                        .addComponent(sbrText)
                        .addContainerGap())))
    );
    gl_conent_p.setVerticalGroup(
        gl_conent_p.createParallelGroup(Alignment.LEADING)
            .addGroup(gl_conent_p.createSequentialGroup()
                .addContainerGap()
                .addGroup(gl_conent_p.createParallelGroup(Alignment.BASELINE)
                    .addComponent(lblItemName)
                    .addComponent(itemField, GroupLayout.PREFERRED_SIZE, 20, GroupLayout.PREFERRED_SIZE))
                .addGap(20)
                .addGroup(gl_conent_p.createParallelGroup(Alignment.LEADING)
                    .addGroup(gl_conent_p.createParallelGroup(Alignment.BASELINE)
                        .addComponent(lblDelivery)
                        .addComponent(delivField, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
                    .addGroup(gl_conent_p.createParallelGroup(Alignment.BASELINE)
                        .addComponent(lblMxPrice)
                        .addComponent(mpriceField, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
                        .addComponent(lblQuantity)
                        .addComponent(quanField, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)))
                .addGap(55)
                .addGroup(gl_conent_p.createParallelGroup(Alignment.BASELINE)
                    .addComponent(lblLogcat)
                    .addComponent(txtConsole, GroupLayout.PREFERRED_SIZE, 200, GroupLayout.PREFERRED_SIZE)
                    .addComponent(sbrText))
                .addContainerGap())
    );
    conent_p.setLayout(gl_conent_p);

    getContentPane().add(conent_p, BorderLayout.NORTH);

    JButton btnBuy = new JButton("Buy");
    btnBuy.addActionListener( new ActionListener() {
        public void actionPerformed(ActionEvent ev) {
            try {
                String title = itemField.getText().trim();
                String mprice = mpriceField.getText().trim();
                String quantity = quanField.getText().trim();
                String deliver = delivField.getText().trim();

                Item_CONCEPT item = new Item_CONCEPT();

                item.setName(title);
                item.setDelivery(Integer.parseInt(deliver));
                item.setStartPrice(0);
                item.setMaxPrice(Integer.parseInt(mprice));

                myAgent.existsSeller(item);

                Date date = new Date();
                DateFormat df = new SimpleDateFormat("dd.MM.yy HH:mm");
                System.out.println(df.format(date)+": Buyer orders an item: "+item.getName());

                //Clearing all fields
                itemField.setText("");
                quanField.setText("");
                delivField.setText("");
                //txtConsole.setText("");
                mpriceField.setText("");
            }
            catch (Exception e) {
                JOptionPane.showMessageDialog(BuyerGUI.this, "A field is filled incorrectly. "+e.getMessage()+" is invalid.", "Error", JOptionPane.ERROR_MESSAGE); 
            }
        }
    } );![enter image description here][1]
4

2 に答える 2

3

これが問題であるかどうかはわかりませんが(SSCCEを提供しなかったため、コードの一部でした)、txtConsolesbrText:の両方を追加しています。

.addComponent(txtConsole, GroupLayout.PREFERRED_SIZE, 200, GroupLayout.PREFERRED_SIZE)
.addComponent(sbrText)

テキスト領域をスクロールペインに配置する場合は、スクロールペインを追加するだけで十分です。

さらに、スクロールペインのチュートリアルに示すように、スクロールペインの適切なサイズを設定することをお勧めします

于 2012-07-01T18:36:25.213 に答える
3

あなたが観察する問題は2つの事実から来ています:

  • コンテンツパネルをに追加していますBorderLayout.NORTH
  • テキストコンソールとスクロールペインを個別のコンポーネントとして追加します

最初のものの場合:交換

getContentPane().add(conent_p, BorderLayout.NORTH);

getContentPane().add(conent_p, BorderLayout.CENTER);

txtConsole2番目の場合:個別に追加しないでください。

水平グループ代用内

.addGroup(gl_conent_p.createSequentialGroup()
  .addComponent(txtConsole, GroupLayout.PREFERRED_SIZE, 345, GroupLayout.PREFERRED_SIZE)
  .addComponent(sbrText).addContainerGap());

.addComponent(sbrText);

垂直グループ内

.addGroup(gl_conent_p.createParallelGroup(Alignment.BASELINE)
  .addComponent(lblLogcat)
  .addComponent(txtConsole, GroupLayout.PREFERRED_SIZE, 200, GroupLayout.PREFERRED_SIZE)
  .addComponent(sbrText)).addContainerGap()));

.addGroup(gl_conent_p.createParallelGroup(Alignment.BASELINE)
  .addComponent(lblLogcat)
  .addComponent(sbrText)).addContainerGap()));
于 2012-07-01T18:39:25.210 に答える