java jpanel 居中_Java Swing - 如何创建一个将其组件显示为居中的JScrollPane

import java.awt.BorderLayout;

import java.awt.Dimension;

import java.awt.Graphics;

import java.awt.Graphics2D;

import java.awt.geom.AffineTransform;

import javax.swing.JFrame;

import javax.swing.JPanel;

import javax.swing.JScrollPane;

import javax.swing.JSpinner;

import javax.swing.SpinnerNumberModel;

public class Main extends JFrame {

public Main() {

MyCanvas thingy = new MyCanvas();

setLayout(new BorderLayout());

JPanel panel = new JPanel();

panel.add(thingy);

JScrollPane scroll = new JScrollPane();

scroll.setViewportView(panel);

add(scroll, BorderLayout.CENTER);

SpinnerNumberModel spmodel = new SpinnerNumberModel(thingy.getThingySize(),

10.0, 2000.0, 10.0);

spmodel.addChangeListener(e->thingy.setThingySize((Double) spmodel.getNumber()));

add(new JSpinner(spmodel), BorderLayout.NORTH);

}

public static void main(String[] args) {

new Main().start();

}

private void start() {

setDefaultCloseOperation(EXIT_ON_CLOSE);

pack();

setVisible(true);

}

}

class MyCanvas extends JPanel {

double size = 20.0;

@Override

public Dimension getPreferredSize() {

int isize = (int) this.size;

return new Dimension(isize, isize);

}

@Override

protected void paintComponent(Graphics g) {

super.paintComponent(g);

int[] x = { 0, 100, 100, 0, 0, 75, 75, 125, 25, 50 };

int[] y = { 0, 10, 10, 100, 25, 125, 75, 75, 510, 50 };

Graphics2D g2d = (Graphics2D) g;

AffineTransform at0 = g2d.getTransform();

g2d.scale(size / 100, size / 100);

g.drawPolyline(x, y, x.length);

g2d.setTransform(at0);

}

public void setThingySize(double size) {

this.size = size;

revalidate();

repaint();

}

public double getThingySize() {

return this.size;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值