Изменение размера значка для правильного размещения в угловой кнопке ScrollPane - PullRequest
2 голосов
/ 22 декабря 2009

Я хотел бы добавить стандартный вопрос о java к угловой кнопке на панели прокрутки, однако изображение не помещается правильно (так как кнопка очень маленькая) Что я должен сделать, чтобы иконка поместилась правильно?

Вот код, он работает, так что вы можете попробовать его и сами убедиться в проблеме:)

import javax.swing.*;

public class CornerButton extends JFrame 
{
    public CornerButton()
    {

        JTextArea area = new JTextArea(20, 20);
        JScrollPane scroll = new JScrollPane(area);
        JButton btn = new JButton(UIManager.getIcon("OptionPane.questionIcon"));
        scroll.setCorner(ScrollPaneConstants.LOWER_RIGHT_CORNER, btn);
        this.add(scroll);
    }

    public static void main(String[] args) 
    {
        // TODO Auto-generated method stub
        CornerButton mainFrame = new CornerButton();

        mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        mainFrame.setVisible(true);
        mainFrame.setSize(200,200);
    }
}

NB. Я разместил тот же вопрос на форумах Sun, но никто не ответил, надеюсь, я найду некоторую помощь здесь:)

спасибо заранее.

Ответы [ 2 ]

2 голосов
/ 22 декабря 2009

Если вы предпочитаете не нарушать внешний вид, вы можете просто изменить размер изображения значка и создать новый значок, подобный этому:

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

public class CornerButton extends JFrame
{
    public CornerButton()
    {
        JTextArea area = new JTextArea(20, 20);
        JScrollPane scroll = new JScrollPane(area);
        Icon icn = UIManager.getIcon("OptionPane.questionIcon");
        int neededWidth = scroll.getVerticalScrollBar().getPreferredSize().width;
        int neededHeight = scroll.getHorizontalScrollBar().getPreferredSize().height;
        Image img = ((ImageIcon) icn).getImage();
        ImageIcon icon = new ImageIcon(img.getScaledInstance(neededWidth, neededHeight, Image.SCALE_AREA_AVERAGING));
        JButton smallBtn = new JButton(icon);
        scroll.setCorner(ScrollPaneConstants.LOWER_RIGHT_CORNER, smallBtn);
        this.add(scroll);
    }

    public static void main(String[] args) 
    {
        CornerButton mainFrame = new CornerButton();

        mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        mainFrame.setVisible(true);
        mainFrame.setSize(200,200);
    }
}

Выглядит тоже неплохо.

0 голосов
/ 22 декабря 2009

Вы можете попробовать увеличить ширину JScrollBars, чтобы у кнопки было больше места для отображения. Например:

scroll.getVerticalScrollBar().setPreferredSize(new Dimension(30, 30));
scroll.getHorizontalScrollBar().setPreferredSize(new Dimension(30, 30));
...