Как я легко редактирую стиль выделенного текста в JTextPane?

Есть ли какой-нибудь способ получить более прямой доступ к видеоконтенту MediaStreamTrack?

blockquote>

Не в реальном времени, нет. W3C обсуждал добавление такого API в рабочих, но сегодня его не существует.

API-интерфейс MediaRecorder приближается: он может предоставлять вам большие двоичные данные с интервалом в несколько миллисекунд (см. start (timeslice) ), но не в реальном времени.

Это кажется очень неэффективным ...

blockquote>

Современные браузеры имеют фоновые потоки, которые выполняют тяжелую работу, например, уменьшение масштаба, поэтому я бы предостерег от преждевременной оптимизации. В общем, вещи замедляются только тогда, когда биты массово открываются для основного потока JavaScript. Поэтому я меньше беспокоюсь о разрешении вашей камеры, чем о размере вашего холста.

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

video.srcObject = await navigator.mediaDevices.getUserMedia({video: true});
await new Promise(r => video.onloadedmetadata = r);
const ctx = canvas.getContext('2d');
requestAnimationFrame(function loop() {
  ctx.drawImage(video, 0, 0, 16, 12);
  requestAnimationFrame(loop);
});

Если все еще возникают проблемы, я бы уменьшил частоту кадров.

6
задан Evan Fosmark 19 April 2009 в 23:35
поделиться

5 ответов

Посмотрите на следующий код в этом файле:

http://pbin.oogly.co.uk/listings/viewlistingdetail/d6fe483a52c52aa951ca15762ed3d3

Пример приведен здесь:

http: // www .java2s.com / Code / Java / Swing-JFC / JTextPaneStylesExample3.htm

Похоже, что вы можете изменить стиль с помощью следующего в слушателе действия:

final Style boldStyle = sc.addStyle("MainStyle", defaultStyle);
StyleConstants.setBold(boldStyle, true);   

doc.setCharacterAttributes(0, 10, boldStyle, true);

Он устанавливает стиль текста между заданным смещением и длина до определенного стиля.

См. Полную вставку для более подробной информации. Это должно исправить вашу проблему.

2
ответ дан 17 December 2019 в 00:14
поделиться

Я бы порекомендовал взглянуть на Java Tutorial от Sun о панелях редактора.

0
ответ дан 17 December 2019 в 00:14
поделиться

Вот фрагмент кода для вставки отформатированного «Hello World!» строка в JEditorPane :

Document doc = yourEditorPane.getDocument();

StyleContext sc = new StyleContext();
Style style = sc.addStyle("yourStyle", null);

Font font = new Font("Arial", Font.BOLD, 18);

StyleConstants.setForeground(style, Color.RED);
StyleConstants.setFontFamily(style, font.getFamily());
StyleConstants.setBold(style, true);

doc.insertString(doc.getLength(), "Hello World!", style);
3
ответ дан 17 December 2019 в 00:14
поделиться

Хорошо, вау. Сложный вопрос. Поэтому я не нашел способа получить стиль данного персонажа. Однако вы можете получить MutableAttributeSet для данного символа и затем проверить, находится ли стиль в этом наборе атрибутов.

   Style s; //your style
   Element run = styledDocument.getCharacterElement( 
       textPane.getSelectionStart() );
   MutableAttributeSet curAttr =
       ( MutableAttributeSet )run.getAttributes();
   boolean containsIt = curAttr.containsAttributes( s );

Одна проблема с получением стиля для диапазона символов состоит в том, что может быть применено более одного стиля. к этому диапазону (пример: вы можете выбрать текст, где некоторые выделены жирным шрифтом, а некоторые нет).

Чтобы обновить выделенный текст, вы можете:

  Style s; //your style
  JTextPane textPane; //your textpane
  textPane.setCharacterAttributes( s, false );

Ох, и получается, что функция getLogicalStyle не работает, потому что она возвращает стиль по умолчанию (или, может быть, просто стиль) для абзаца, который содержит p, а не стиль символа в p.

0
ответ дан 17 December 2019 в 00:14
поделиться

Самый простой способ манипулировать текстовыми панелями - это использовать наборы редактора и связанные с ними действия . Вы можете найти демонстрацию этого в JDK примерах (в jdk \ demo \ jfc \ Stylepad ).

Пример кода, который устанавливает StyledEditorKit и использует FontSizeAction для управления текстом:

  public static void main(String[] args) {
    // create a rich text pane
    JTextPane textPane = new JTextPane();
    JScrollPane scrollPane = new JScrollPane(textPane,
        JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
        JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
    // install the editor kit
    StyledEditorKit editorKit = new StyledEditorKit();
    textPane.setEditorKit(editorKit);
    // build the menu
    JMenu fontMenu = new JMenu("Font Size");
    for (int i = 48; i >= 8; i -= 10) {
      JMenuItem menuItem = new JMenuItem("" + i);
      // add an action
      menuItem
          .addActionListener(new StyledEditorKit.FontSizeAction(
              "myaction-" + i, i));
      fontMenu.add(menuItem);
    }
    JMenuBar menuBar = new JMenuBar();
    menuBar.add(fontMenu);
    // show in a frame
    JFrame frame = new JFrame();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(600, 400);
    frame.setJMenuBar(menuBar);
    frame.setContentPane(scrollPane);
    frame.setVisible(true);
  }

(Совет: если вы хотите использовать FontFamilyAction , посмотрите GraphicsEnvironment.getAvailableFontFamilyNames () и логические имена семейств шрифтов .)

2
ответ дан 17 December 2019 в 00:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: