Java 응용 프로그램에서 on/off 토글 스위치를 추가하고 싶습니다. 스윙 슬라이더에서 빌드해야합니까? 아니면 이미 더 가까운 것이 있습니까? 여기섹시한 온/오프 슬라이더를 추가하는 방법?
http://www.premiumpixels.com/freebies/onoff-switches-and-toggles-psd/
하는 JScrollBar를 사용하여 어쩌면Java 응용 프로그램에서 on/off 토글 스위치를 추가하고 싶습니다. 스윙 슬라이더에서 빌드해야합니까? 아니면 이미 더 가까운 것이 있습니까? 여기섹시한 온/오프 슬라이더를 추가하는 방법?
http://www.premiumpixels.com/freebies/onoff-switches-and-toggles-psd/
하는 JScrollBar를 사용하여 어쩌면, 단지 및 완료되지 않은 아이디어, 최대
,536,913 당신에게로import java.awt.*;
import java.awt.event.AdjustmentEvent;
import java.awt.event.AdjustmentListener;
import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
public class Sliders {
private JFrame frame;
private JPanel main;
private JPanel scrollBarPanel = new JPanel();
private JPanel sliderPanel;
public Sliders() {
frame = new JFrame();
main = new JPanel(new GridLayout(2, 1));
final JScrollBar scrollBar = new JScrollBar(JScrollBar.HORIZONTAL, 0, 100, 0, 200);
int height = scrollBar.getPreferredSize().height;
scrollBar.setPreferredSize(new Dimension(175, height));
scrollBarPanel.add(scrollBar);
main.add(scrollBarPanel);
sliderPanel = new JPanel();
final JSlider slider = new JSlider(JSlider.HORIZONTAL, 0, 255, 128);
slider.setMajorTickSpacing(48);
slider.setMinorTickSpacing(16);
slider.setPaintTicks(true);
sliderPanel.add(slider);
main.add(sliderPanel);
frame.add(main, BorderLayout.CENTER);
scrollBar.addAdjustmentListener(new AdjustmentListener() {
@Override
public void adjustmentValueChanged(AdjustmentEvent e) {
System.out.println("JScrollBar's current value = " + scrollBar.getValue());
}
});
slider.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
System.out.println("JSlider's current value = " + slider.getValue());
}
});
frame.pack();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
Sliders sliders = new Sliders();
}
});
}
}
을 공유해 주셔서 감사합니다. 선택 로직 (일명 : ButtonModel)을 구현해야합니다. – kleopatra
@kleopatra hmmm 잘 됐네요 .... 방법 http://stackoverflow.com/questions/4218117/sliding-window-under-a-jpanel/7291620#7291620, 환상이 가능할 수도, 내가 게시 한 코드를 업데이 트 hesitage하지 말고 – mKorbel
+1 재미있는 . 나는 아이콘과 함께'JToggleButton'을 사용했지만'BoundedRangeModel'은 새로운 JSlider (JSlider.HORIZONTAL, 0, 1, 0)에서 작동합니다. – trashgod
내장 구성 요소 JCheckBox를 사용하십시오.
JCheckBox cb = new JCheckBox(createImageIcon("off-image.gif", "Click To Turn On"));
cb.setSelectedIcon(createImageIcon("on-image.gif", "Click To Turn Off"));
아마도 약간의 예가 도움이 될 것입니다.
는public class Popup extends JFrame {
public Popup() {
setBounds(100, 100, 300, 120);
setDefaultCloseOperation(3);
getContentPane().setLayout(new FlowLayout(FlowLayout.LEADING, 10, 10));
getContentPane().add(new JSwitchBox("on", "off"));
getContentPane().add(new JSwitchBox("yes", "no"));
getContentPane().add(new JSwitchBox("true", "false"));
getContentPane().add(new JSwitchBox("on", "off"));
getContentPane().add(new JSwitchBox("yes", "no"));
getContentPane().add(new JSwitchBox("true", "false"));
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new Popup().setVisible(true);
}
});
}
public class JSwitchBox extends AbstractButton{
private Color colorBright = new Color(220,220,220);
private Color colorDark = new Color(150,150,150);
private Color black = new Color(0,0,0,100);
private Color white = new Color(255,255,255,100);
private Color light = new Color(220,220,220,100);
private Color red = new Color(160,130,130);
private Color green = new Color(130,160,130);
private Font font = new JLabel().getFont();
private int gap = 5;
private int globalWitdh = 0;
private final String trueLabel;
private final String falseLabel;
private Dimension thumbBounds;
private Rectangle2D bounds;
private int max;
public JSwitchBox(String trueLabel, String falseLabel) {
this.trueLabel = trueLabel;
this.falseLabel = falseLabel;
double trueLenth = getFontMetrics(getFont()).getStringBounds(trueLabel, getGraphics()).getWidth();
double falseLenght = getFontMetrics(getFont()).getStringBounds(falseLabel, getGraphics()).getWidth();
max = (int)Math.max(trueLenth, falseLenght);
gap = Math.max(5, 5+(int)Math.abs(trueLenth - falseLenght));
thumbBounds = new Dimension(max+gap*2,20);
globalWitdh = max + thumbBounds.width+gap*2;
setModel(new DefaultButtonModel());
setSelected(false);
addMouseListener(new MouseAdapter() {
@Override
public void mouseReleased(MouseEvent e) {
if(new Rectangle(getPreferredSize()).contains(e.getPoint())) {
setSelected(!isSelected());
}
}
});
}
@Override
public Dimension getPreferredSize() {
return new Dimension(globalWitdh, thumbBounds.height);
}
@Override
public void setSelected(boolean b) {
if(b){
setText(trueLabel);
setBackground(green);
} else {
setBackground(red);
setText(falseLabel);
}
super.setSelected(b);
}
@Override
public void setText(String text) {
super.setText(text);
}
@Override
public int getHeight() {
return getPreferredSize().height;
}
@Override
public int getWidth() {
return getPreferredSize().width;
}
@Override
public Font getFont() {
return font;
}
@Override
protected void paintComponent(Graphics g) {
g.setColor(getBackground());
g.fillRoundRect(1, 1, getWidth()-2 - 1, getHeight()-2 ,2 ,2);
Graphics2D g2 = (Graphics2D)g;
g2.setColor(black);
g2.drawRoundRect(1, 1, getWidth()-2 - 1, getHeight()-2 - 1, 2,2);
g2.setColor(white);
g2.drawRoundRect(1 + 1, 1 + 1, getWidth()-2 - 3, getHeight()-2 - 3, 2,2);
int x = 0;
int lx = 0;
if(isSelected()) {
lx = thumbBounds.width;
} else {
x = thumbBounds.width;
}
int y = 0;
int w = thumbBounds.width;
int h = thumbBounds.height;
g2.setPaint(new GradientPaint(x, (int)(y-0.1*h), colorDark , x, (int)(y+1.2*h), light));
g2.fillRect(x, y, w, h);
g2.setPaint(new GradientPaint(x, (int)(y+.65*h), light , x, (int)(y+1.3*h), colorDark));
g2.fillRect(x, (int)(y+.65*h), w, (int)(h-.65*h));
if (w>14){
int size = 10;
g2.setColor(colorBright);
g2.fillRect(x+w/2-size/2,y+h/2-size/2, size, size);
g2.setColor(new Color(120,120,120));
g2.fillRect(x+w/2-4,h/2-4, 2, 2);
g2.fillRect(x+w/2-1,h/2-4, 2, 2);
g2.fillRect(x+w/2+2,h/2-4, 2, 2);
g2.setColor(colorDark);
g2.fillRect(x+w/2-4,h/2-2, 2, 6);
g2.fillRect(x+w/2-1,h/2-2, 2, 6);
g2.fillRect(x+w/2+2,h/2-2, 2, 6);
g2.setColor(new Color(170,170,170));
g2.fillRect(x+w/2-4,h/2+2, 2, 2);
g2.fillRect(x+w/2-1,h/2+2, 2, 2);
g2.fillRect(x+w/2+2,h/2+2, 2, 2);
}
g2.setColor(black);
g2.drawRoundRect(x, y, w - 1, h - 1, 2,2);
g2.setColor(white);
g2.drawRoundRect(x + 1, y + 1, w - 3, h - 3, 2,2);
g2.setColor(black.darker());
g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
g2.setFont(getFont());
g2.drawString(getText(), lx+gap, y+h/2+h/4);
}
}
}
다용도 +1. 제공된 아이콘을 클리핑하는 것을 생각하고 있었지만이 방법은 더 쉽게 현지화 할 수 있습니다. – trashgod
+1 섹시 함. 그러나 슬라이더 느낌이 결여되어 있습니다. 즉시 mvn 코드를 설치하려면; mvn exec : java -Dexec.mainClass = "com.mysimpatico.sexybutton.Popup" http://dl.dropbox.com/u/23278095/SexyButton.zip – simpatico
아마도이 질문에 대답하고 싶을 것입니다 (http : //stackoverflow.com/q/19273548/2853553) – mKorbel
이러한 점은 standar을 스윙 라이브러리에 존재하지 않습니다. 타사 라이브러리를 검색하거나 직접 만들어보십시오. JCheckBox를 사용합니다. 아이폰 컨트롤은 작은 터치 스크린을위한 것이고, 스윙 것들은 마우스가있는 대형 데스크탑 스크린 크기를위한 것입니다. –
@simpatico +1 – mKorbel